2011-01-13 55 views
0

好吧,這就是我想做的事:調用編譯時檢查方法與動態參數在C#

public static void CallStaticMethod(Type myType, String methodName, Object[] parameters) 
{ 
    MethodInfo m = myType.GetMethod(methodName); // make this compile-time safe 
    m.Invoke(null, parameters);     // methodName method is supposed to be static 
} 

現在,myType.GetMethod(方式)可以在運行時失敗,如果「方法名」不存在。
有什麼辦法可以使編譯時安全嗎?
(假設參數正確)

我想以某種方式調用的方法是這樣的:

CallStaticMethod(()=>MyType.MyMethod(), Object[] parameters) 

通知,這不起作用,因爲你需要指定lambda表達式中的參數。

換句話說,我需要一個編譯時安全句柄的方法。 我可以得到一個使用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); 
}