问题描述
|
所以我似乎有信心以下两个陈述是相同的
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; };