一般Lambda语法问题

时间:2011-05-25 13:42:52

标签: c# .net c#-4.0 syntax lambda

所以我似乎确信以下两个陈述是相同的

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");
});

但是你能在第一个例子中做同样的事情吗?我似乎找不到办法。

4 个答案:

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