C#执行给定方法的方法

时间:2011-01-24 10:21:28

标签: c# delegates func

我正在尝试编写以下内容:我想编写一个方法“A”,它将另一个方法“B”作为参数,并为此方法B提供未知数量的参数。(params object [] args) 。现在,在方法A中,我想用参数args调用B. B现在将返回一个我希望A返回的对象。

这听起来有点奇怪,因此我将添加一些示例代码:

public object A(Func<object> B, params object[] args)
{
    object x = B.Method.Invoke(args);

    return x;
}

问题是,Func不能那样工作。有谁知道这样做的方法?

此致 基督教

4 个答案:

答案 0 :(得分:3)

Func<object>是一个不带参数并返回object的方法的委托。如果将其更改为Func<object,object>,则将采用参数并返回对象:

public object A(Func<object, object> B, params object[] args)
{
    object x = B(args);

    return x;
}

答案 1 :(得分:3)

void Main()
{
    Func<int> m1=()=>1;
    Console.WriteLine(A(m1));

    Func<int,int> m2=i=>i;
    Console.WriteLine(A(m2,55));
}

object A(Delegate B,params object[] args)
{

    return B.Method.Invoke(B.Target,args);
}

...再见类型安全

答案 2 :(得分:1)

这应该这样做:

public object A(Func<object[], object> B, params object[] args) 
{     
     object x = B(args);     
     return x; 
}

答案 3 :(得分:1)

你应该有这样的代码:

public object A(Func<object[], object> B, params object[] args)
{
    object x = B(args);

    return x;
}

你错过了Func重载需要接受你的参数对象数组。

无论如何,如果你需要这个方法“A”来接受无参数函数,你应该创建一个无参数函数参数重载“A”。