2011-01-13 58 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); 
}