Lambda / Action在C#中有多个语句。可能吗?

时间:2013-11-16 05:50:40

标签: c# lambda

目前我有这个:

foreach (Expression e in arguments)
{
    e.shouldBePushedToStack = true;
    scope.addChild(e);
}

我想知道我是否可以这样做:(不是真正的法律代码)

arguments.ForEach( e => e.shouldBePushedToStack = true, 
                        scope.addChild(e));

由于

3 个答案:

答案 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;
       });