5

我正在尝试编写以下内容:我想编写一个方法“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

4 回答 4

3

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

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

    return x;
}
于 2011-01-24T10:26:33.153 回答
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);
}

...再见类型安全

于 2011-01-24T10:31:44.487 回答
1

这应该这样做:

public object A(Func<object[], object> B, params object[] args) 
{     
     object x = B(args);     
     return x; 
}
于 2011-01-24T10:25:58.653 回答
1

你应该有这样的代码:

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

    return x;
}

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

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

于 2011-01-24T10:27:43.460 回答