2016-05-06 7 views
3

未知のパラメータでメソッドを生成する方法は?私はC#のスクリプトをコンパイルするMicrosoft.CSharp.dllを使用未知のパラメータでメソッドを生成するには?

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); 

だから、私はいくつかのいくつかの機能を追加する必要がありますが、この機能は、任意の数のパラメータとし、種類(DateTimeintdoubleのリストにすることができ等々)。その上

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

または

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

と:

機能は次のように呼び出す必要があります。

ユーザーはコード内でこの機能を使用できます。

この関数の生成方法は? は一例として、私は今、コードを生成する方法を教えて:

// 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

なぜあなたは、引数の未定義の範囲をしたいですか、なぜ単に与えられたデータを持つオブジェクトを解析できませんか?次に、オブジェクト内の属性を操作することができます。 –

+0

@MartinM 'string.Join()'または 'string.Concat()'はこの振る舞いを持ち、存在する資格があります – fubo

答えて

5

ここでこれはに与えられたすべての値を加算

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

パラメータの変化量との一つのアプローチがあります1つの文字列。

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

+2

私の答えに間違いがありますか? – fubo

+0

@fubo、できるだけ早くコードを使用しようとしています。良い見えます:) –

+0

私はなぜこれがdownvotedされたかわからない...おそらくそれは編集の前だった? –

関連する問題