所以我似乎确信以下两个陈述是相同的
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");
});
但是你能在第一个例子中做同样的事情吗?我似乎找不到办法。
答案 0 :(得分:8)
是的,你可以:)
List<object> values = new List<object>();
values.ForEach(value =>
{
System.Diagnostics.Debug.WriteLine(value.ToString());
System.Diagnostics.Debug.WriteLine("Some other action");
}
);
答案 1 :(得分:2)
这很好用:
values.ForEach(value =>
{ System.Diagnostics.Debug.WriteLine(value.ToString()); }
);
也许你忘记了;
答案 2 :(得分:2)
第一个和第二个之间唯一真正的区别是{}。将其添加到第一个,然后您可以根据需要添加任意数量的行。它不是(对象值)允许您添加多行。
答案 3 :(得分:1)
正如其他人所示,您可以使用语句lambda (带大括号)来执行此操作:
parameter-list => { statements; }
但是,值得注意的是,这有一个限制:你不能将语句lambda转换为表达式树,只有委托 >。例如,这有效:
Func<int> x = () => { return 5; };
但这不是:
Expression<Func<int>> y = () => { return 5; };