好的,这就是我想要做的事情:
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
}
现在,如果“methodName”不存在,myType.GetMethod(methodName)可能会在运行时失败。
有没有办法让这个编译时安全?
(假设参数正确)
我想以某种方式调用这个方法:
CallStaticMethod(()=>MyType.MyMethod(), Object[] parameters)
请注意,这不起作用,因为您需要在lambda表达式中指定参数。
换句话说,我需要一个方法的编译时安全句柄。 我可以使用typeof()获取一个类型,但是方法可能吗?
答案 0 :(得分: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);
}