lambda括号与lambda表达式c#中没有大括号

时间:2017-08-31 00:48:22

标签: c# lambda delegates

我对C#很新,大约1年的经验。最近介绍了lambda表达式。我想要一个Action<string>,它会向MessageBox显示一个带有自定义错误文本的错误。我在想,有什么区别:

public static Action<string> Error = s => { MessageBox.Show(s, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); };

public static Action<string> Error = s => MessageBox.Show(s, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

感谢任何有用的建议:)

2 个答案:

答案 0 :(得分:1)

根据官方C#语言规范:

8.2块

一个块允许在允许单个语句的上下文中写入多个语句。

block:
    {   statement-listopt   }

一个块由一个可选的语句列表(第8.2.1节)组成,用大括号括起来。 如果省略语句列表,则该块被称为空。

一个块可能包含声明语句(第8.5节)。 块中声明的局部变量或常量的范围是块。

在一个块中,表达式上下文中使用的名称的含义必须始终相同(第7.6.2.1节)。

块执行如下:

•如果块为空,则控制转移到块的结束点。

•如果该块不为空,则控制权转移到语句列表中。

当控制到达语句列表的结束点时,控制权将转移到块的结束点。

如果块本身可以访问,则可以访问块的语句列表。

如果块为空或者语句列表的结束点可以到达,则可以到达块的结束点。

答案 1 :(得分:0)

区别仅在于语法,它对执行的代码没有影响。使用两种符号编译相同的东西。

=>之后,您可以编写一个由{}包围的块语句。您也可以编写一个表达式'代码行'并省略花括号,以防止样板花括号。