使用c#中的动态参数调用编译时检查的方法

时间:2011-01-13 17:13:26

标签: 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 method is supposed to be static
}

现在,如果“methodName”不存在,myType.GetMethod(methodName)可能会在运行时失败。
有没有办法让这个编译时安全? (假设参数正确)

我想以某种方式调用这个方法:

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

请注意,这不起作用,因为您需要在lambda表达式中指定参数。

换句话说,我需要一个方法的编译时安全句柄。 我可以使用typeof()获取一个类型,但是方法可能吗?

1 个答案:

答案 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);
}