目前我有这个:
foreach (Expression e in arguments)
{
e.shouldBePushedToStack = true;
scope.addChild(e);
}
我想知道我是否可以这样做:(不是真正的法律代码)
arguments.ForEach( e => e.shouldBePushedToStack = true,
scope.addChild(e));
由于
答案 0 :(得分:2)
arguments.ForEach(e =>
{
e.shouldBePushedToStack = true;
scope.addChild(e);
});
答案 1 :(得分:2)
你可以这样做多行lambda:
arguments.ForEach( e => {
e.shouldBePushedToStack = true;
scope.addChild(e));
});
请注意,要从多行lambda返回值,必须使用return
键。作为一个简单的例子:
arguments.Select( e => {
if (e.shouldBePushedToStack) {
return "foo";
} else {
return "baz";
}
});
但是,鉴于您的代码具有副作用(修改e
并附加到外部列表),显式使用foreach
循环并避免使用LINQ可能更清楚,因为(据我所知,LINQ暗示你正在进行功能式转换,这意味着运行操作没有副作用。
答案 2 :(得分:1)
是 - 请注意{ }
包装多个语句。
arguments.ForEach( e => {
e.shouldBePushedToStack = true,
scope.addChild(e);
});
在某些情况下,您可能需要返回值 - 只需添加return
:
arguments.Where( e => {
bool result = true;
// some code here....
return result;
});