将lambda传递给具有不同参数的方法

时间:2010-09-23 18:55:20

标签: c# .net

是否可以调用传递具有可变数量参数的lambda的方法?

例如:

public void Go(Action x)
{
}

我需要调用它传递参数,例如:

Go(() => {});
Go((x, y) => {});
Go((x) => {});

有可能吗?怎么样?

3 个答案:

答案 0 :(得分:6)

不是没有施法。但是通过铸造,它很容易完成:

void Go(System.Delegate d) {}
...
Go((Action)(()=>{}));
Go((Action<int>)(x=>{}));
Go((Action<int, int>)((x,y)=>{}));

出于好奇, Go的主体是什么?你有一个未知类型的委托,所以你不知道要传递什么参数来调用它。您打算如何调用该委托?

答案 1 :(得分:1)

您可以在

中创建重载
public void Go<T>(Action<T> x)
{
}

这篇文章展示了Action<T>的更多示例。请注意,它不会从MSDN返回值:

  

封装具有的方法   单个参数并且不返回   值。

答案 2 :(得分:0)

您必须强烈定义每种lambda类型的签名。

public TResult Go<TResult>(Func<TResult> x) {return x()};

public TResult Go<T,TResult>(Func<T, TResult> x, T param1) {return x(param1)};

...