使用“动态动作”参数创建方法

本文关键字:参数 创建 方法 动态动作 动态 使用 | 更新日期: 2023-09-27 18:20:41

嗨,有没有一种方法可以创建一个接受任何类型方法的方法?我的意思是它有任何类型的参数,或者它有多少参数

void SampleMethod(Action<dynamic> Action)
{
}

我现在做得很好,但我认为我做错了,有办法做到吗?无论它有一个参数、多个参数还是没有参数。

我是做错了还是错过了什么?

我试过这个代码

void SampleMethod(Action Action)
{
}

但它似乎只接受没有参数的方法我做错了吗?

使用“动态动作”参数创建方法

我认为Delegate就是您想要的。

static void A1() {
  Console.Out.WriteLine("A1");
}
static void A2(int foo) {
  Console.Out.WriteLine("A2");
}
static void SampleMethod(Delegate dlgt) {
}

用法:

SampleMethod(new Action(A1));
SampleMethod(new Action<int>(A2));

您可以通过DynamicInvoke()调用该方法,但必须提供确切的参数列表。

static void SampleMethod(Delegate dlgt) {
  // ok for A1, will throw an exception for A2
  dlgt.DynamicInvoke(null);
}

带反射,

    SampleMethod(this.GetType().GetMethod("WriteHello"), "Hello");
    public void WriteHello(string param)
    {
        Debug.WriteLine(param);
    }
    public void SampleMethod(MethodInfo mi, params object[] arguments)
    {
        mi.Invoke(this,arguments);           
    }