是否可以調用一個傳遞具有可變數量參數的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