是否可以调用传递具有可变数量参数的lambda的方法?
例如:
public void Go(Action x)
{
}
我需要调用它传递参数,例如:
Go(() => {});
Go((x, y) => {});
Go((x) => {});
有可能吗?怎么样?
答案 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)};
...