2012-12-29 72 views

回答

7

您可以使用anonymous method代替:

Action<String> action = delegate (string v) { names.add(v); }; 

,將工作,如果現有的lambda表達式轉換成一個代表。它不會工作時,現有的lambda表達式被轉換爲表達式樹。

(你真的需要使用C#2,但?伊克。不要忘了,你可以使用C#3或更高,但仍然面向.NET 2,如果是這樣的真正要求,生產力的好處對於使用C#3和更高版本,確實可以升級您的Visual Studio版本......)

+0

感謝@Jon爲您的快速回復..將檢查並回來.. – csLijo

+3

@csLijo:還記得.NET 3.5只是.NET 2.0 SP2的一些額外的程序集。假設您不使用新功能,它與服務包一樣安全,因此與您正在使用的新功能一樣危險。 –

+0

謝謝@Jon:問題解決 – csLijo

1

在這個特定的示例中,lambda箭頭實際上只是調用已存在的未經更改參數列表的方法,您也可以使用「方法組」

所以

v => names.Add(v) 

可以只用

names.Add /* OK in C# 2.0, method group conversion */ 

被取代,但在拉姆達不只是等同於現有的命名方法,一般情況下,使用匿名方法像其他答案建議:

delegate (string v) { names.Add(v); } 

所有這些表達式都可以分配給委託類型如Action<string>有一個string參數(值參數)並返回void