2

如何转换表达式

v => names.Add(v); // Consider names as List<string> and v as string 

进入 c# 2.0?

4

2 回答 2

8

您可以改用匿名方法

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

如果将现有的 lambda 表达式转换为委托,这将起作用。现有的 lambda 表达式转换为表达式树时,它将不起作用。

(你真的需要使用 C# 2 吗?哎呀。别忘了你可以使用 C# 3 或更高版本,但仍以 .NET 2 为目标,如果那是真正的要求的话。使用 C# 3 和更高版本在生产力方面的好处确实使它可以升级您的 Visual Studio 版本...)

于 2012-12-29T10:01:38.430 回答
1

在这个特定示例中,lambda 箭头实际上只是调用具有未更改参数列表的现有方法,您也可以只使用“方法组”

所以

v => names.Add(v)

可以替换为

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

但在 lambda 不仅等同于现有命名方法的一般情况下,请使用匿名方法,如其他答案所示:

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

所有这些表达式都可以分配给一个委托类型,例如Action<string>有一个string参数(值参数)并返回void

于 2012-12-29T10:25:22.083 回答