一般Lambda语法问题

本文关键字:问题 语法 Lambda 一般 | 更新日期: 2023-09-27 17:57:42

因此,我似乎确信以下两个语句是相同的

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

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

一般Lambda语法问题

是的,您可以:)

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