如何转换表达式
v => names.Add(v); // Consider names as List<string> and v as string
进入 c# 2.0?
您可以改用匿名方法:
Action<String> action = delegate (string v) { names.add(v); };
如果将现有的 lambda 表达式转换为委托,这将起作用。将现有的 lambda 表达式转换为表达式树时,它将不起作用。
(你真的需要使用 C# 2 吗?哎呀。别忘了你可以使用 C# 3 或更高版本,但仍以 .NET 2 为目标,如果那是真正的要求的话。使用 C# 3 和更高版本在生产力方面的好处确实使它可以升级您的 Visual Studio 版本...)
在这个特定示例中,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
。