一般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\");
});
但是在第一个示例中您可以做同样的事情吗?我似乎找不到办法。     

解决方法

是的你可以 :)
        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; };