2016-05-06 23 views
3

Wie man Methode mit unbekannten Parametern erzeugt?Wie man Methode mit unbekannten Parametern erzeugt?

Ich verwende Microsoft.CSharp.dll C# Skripte zu kompilieren:

CSharpCodeProvider provider = new CSharpCodeProvider(); 
CompilerParameters compilerParams = new CompilerParameters { GenerateExecutable = false, GenerateInMemory = true }; 
string scriptCode = GetFullCode(); //here i add usings and so on 
var results = provider.CompileAssemblyFromSource(compilerParams, scriptCode); 

Also, ich brauche einige wenige Funktionen hinzufügen, aber diese Funktionen können mit einer beliebigen Anzahl von Parametern und mit der Liste der Typen (DateTime, int, double und so weiter).

Funktion sollte wie folgt sein nennen:

function(String,String,DateTime,int,...); 

oder

function(DateTime,int,String,..); 

und so weiter.

Und Benutzer kann diese Funktionen in Code verwenden.

Wie generiert man diese Funktionen? Als Beispiel, ich sagen, wie ich Code generieren jetzt:

// GetFullCode:

StringBuilder sb = new StringBuilder(); 

foreach (DictionaryEntry de in Assembles) 
{ 
    foreach (var us in de.Value.ToString().Split(new char[] { ';' })) 
    { 
     if (!string.IsNullOrWhiteSpace(us)) 
      sb.AppendLine("using " + us + ";"); 
    } 
} 

sb.AppendLine("namespace " + Namespace + "\n{");    
sb.AppendLine(GetClassCode()); 

if(withMainFunc) 
{ 
    sb.AppendLine(@"static class Program 
        { 

        [STAThread] 
        static void Main() 
        { 
         //some init code              
        } 
       }"); 
} 
sb.AppendLine("}"); 
+1

Warum wollen Sie eine undefinierte Reihe von Argumenten, warum nicht nur ein Objekt mit den angegebenen Daten analysieren? Dann können Sie an den Attributen im Objekt arbeiten ... –

+0

@MartinM 'string.Join()' oder 'string.Concat()' haben dieses Verhalten und sie haben ihre Berechtigung zu existieren – fubo

Antwort

5

Hier ist ein Ansatz mit einer variablen Menge von Parametern

public static string funcion(params object[] Items) 
{ 
    StringBuilder sb = new StringBuilder(); 
    foreach (var item in Items) 
    { 
     sb.Append(item); 
    } 
    return sb.ToString(); ; 
} 

Diese alle angegebenen Werte addiert in eine Schnur.

useage: string Result = funcion(DateTime.Now, "foo", 1);

+2

etwas falsch mit meiner Antwort? – fubo

+0

@fubo, ich versuche, Ihren Code so schnell wie möglich zu verwenden. Sieht gut aus :) –

+0

Ich weiß nicht, warum das downvoted wurde ... Vielleicht war es vor der Bearbeitung? –

Verwandte Themen