一般Lambda语法问题
本文关键字:问题 语法 Lambda 一般 | 更新日期: 2023-09-27 17:57:42
因此,我似乎确信以下两个语句是相同的
List<object> values = new List<object>();
values.ForEach(value => System.Diagnostics.Debug.WriteLine(value.ToString()));
和
List<object> values = new List<object>();
values.ForEach((object value) => {
System.Diagnostics.Debug.WriteLine(value.ToString());
});
我知道我可以在第二个例子中插入多行代码,比如
List<object> values = new List<object>();
values.ForEach((object value) => {
System.Diagnostics.Debug.WriteLine(value.ToString());
System.Diagnostics.Debug.WriteLine("Some other action");
});
但是你能在第一个例子中做同样的事情吗?我似乎想不出办法。
是的,您可以:)
List<object> values = new List<object>();
values.ForEach(value =>
{
System.Diagnostics.Debug.WriteLine(value.ToString());
System.Diagnostics.Debug.WriteLine("Some other action");
}
);
这很好用:
values.ForEach(value =>
{ System.Diagnostics.Debug.WriteLine(value.ToString()); }
);
也许你忘了;
第一个和第二个之间唯一真正的区别是{}。将其添加到第一行,然后可以添加任意多的行。允许添加多行的不是(对象值)。
正如其他人所示,您可以使用语句lambda(带大括号)来执行此操作:
parameter-list => { statements; }
然而,值得注意的是,这有一个限制:不能将语句lambda转换为表达式树,只能将委托。例如,这是有效的:
Func<int> x = () => { return 5; };
但事实并非如此:
Expression<Func<int>> y = () => { return 5; };