是否可以调用一个传递具有可变数量参数的lambda的方法?将lambda传递给具有不同参数的方法
例如:
public void Go(Action x)
{
}
我需要调用它传递参数,如:
Go(() => {});
Go((x, y) => {});
Go((x) => {});
这可能吗?怎么样?
是否可以调用一个传递具有可变数量参数的lambda的方法?将lambda传递给具有不同参数的方法
例如:
public void Go(Action x)
{
}
我需要调用它传递参数,如:
Go(() => {});
Go((x, y) => {});
Go((x) => {});
这可能吗?怎么样?
您可以创建重载为
public void Go<T>(Action<T> x)
{
}
这里是表示Action<T>
更多的例子的文章。请注意,它没有返回值,从MSDN:
封装具有 单个参数,并且不返回 值的方法。
不是没有铸造。但随着铸造,它很容易做到:
void Go(System.Delegate d) {}
...
Go((Action)(()=>{}));
Go((Action<int>)(x=>{}));
Go((Action<int, int>)((x,y)=>{}));
出于好奇,什么是围棋的身体怎么办?你有一个未知类型的委托,所以你不知道要通过什么参数来调用它。你打算如何调用这个委托?
您必须将lambda表达式放在括号中。除非你改变实施。 – 2010-09-23 19:06:43
@Yuriy:好点,谢谢! – 2010-09-23 19:10:24
您必须强烈定义每个lambda类型的签名。
public TResult Go<TResult>(Func<TResult> x) {return x()};
public TResult Go<T,TResult>(Func<T, TResult> x, T param1) {return x(param1)};
...
@布鲁诺,你为什么编辑尤里的帖子和社论的额外内容?这对于编辑来说并不合适,因为它意味着该内容的作者是尤里,而实际上它就是你。 “修改”应该用于更正。相反,你应该添加一条评论(像这样)。 – 2010-09-23 19:24:45
如果我不能改进他的答案,我会发布我自己的并接受它。如果他不喜欢编辑他可以删除,然后我会创建另一个答案。 – BrunoLM 2010-09-23 19:25:54
我很酷。 – 2010-09-23 19:35:47