使用动态操作参数创建方法

时间:2014-09-04 10:31:39

标签: c#

您有没有办法创建一种接受任何方法的方法?我的意思是它有任何类型的参数或它有多少参数

void SampleMethod(Action<dynamic> Action)
{
}

我目前正在这样做,但我认为我做错了有没有办法做到这一点?是否有参数或多个参数。

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

我试过这段代码

void SampleMethod(Action Action)
{
}

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

2 个答案:

答案 0 :(得分:1)

我认为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);
}

答案 1 :(得分:1)

使用Reflection,

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