Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中使用动态参数调用编译时检查的方法#_C#_Dynamic_Static_Method Call - Fatal编程技术网

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