C# 在c中使用动态参数调用编译时检查的方法#
好的,这就是我想做的:C# 在c中使用动态参数调用编译时检查的方法#,c#,dynamic,static,method-call,C#,Dynamic,Static,Method Call,好的,这就是我想做的: 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 me
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()获得一个关于类型的函数,但是否可以使用方法?使用函数指针,即委托。 简单的例子:
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;
}
您可以对任何代理使用DynamicVoke,例如:
static object InvokeAnyDelegate(Delegate d, params object[] args)
{
return d.DynamicInvoke(args);
}
使用函数指针,即委托。 简单的例子:
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;
}
您可以对任何代理使用DynamicVoke,例如:
static object InvokeAnyDelegate(Delegate d, params object[] args)
{
return d.DynamicInvoke(args);
}