2011-01-13 12 views
0

[OK]をC#で動的な引数を持つメソッドをコンパイル時-チェックし、これは私が何をしたいです存在する。
このコンパイル時に安全な方法はありますか?
コール

が、私はこのように何らかの形でメソッドを呼び出すしたいと思います(想定パラメータが正しい):

あなたはラムダ式内の引数を指定する必要がありますので、これは動作しないことを
CallStaticMethod(()=>MyType.MyMethod(), Object[] parameters) 

予告。

つまり、メソッドにはコンパイル時に安全なハンドルが必要です。 typeof()を使ってタイプを取得することはできますが、メソッドは可能ですか?

答えて

3

関数ポインタ、つまりデリゲートを使用します。 簡単な例:

delegate int StringIntParse(string value); 

    public static int Main(string[] args) 
    { 
     StringIntParse p = int.Parse; 
     Console.WriteLine(p("34")); 
     Console.WriteLine(p.DynamicInvoke(new object[] { "43" })); 
     return 0; 
    } 

あなたが例えば、任意のデリゲートにDynamicInvokeを使用することができます。:

static object InvokeAnyDelegate(Delegate d, params object[] args) 
{ 
    return d.DynamicInvoke(args); 
}