c# – 为什么在lambda语句周围的括号会引起语法错误?

前端之家收集整理的这篇文章主要介绍了c# – 为什么在lambda语句周围的括号会引起语法错误?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻找一个很好的解释为什么一个代码无法编译,而其他的编译很好.

失败:

richTextBox1.Invoke(new MethodInvoker((() => { richTextBox1.AppendText("test"); })));

给出错误

Method name expected

在MethodInvoker之后的右括号上(.显然,我不能将lambda语句包装在括号中.

编译:

richTextBox1.Invoke(new MethodInvoker(() => { richTextBox1.AppendText("test"); }));

问题是 – 为什么?

我总是把它当作理所当然的,如果我想要的话,我可以把任何方法param包含在括号中,但显然lambda表达式并不是这样.我知道他们有点特别,但我仍然看不到很好的理由.也许我不明白一些关于语法的东西.我真的很想得到它.

顺便说一句,这在VS2008,.NET 3.5 SP1中呈现,我还没有在VS2010和.NET 4中测试它.

解决方法

它不是lambda表达式,它是包含lambda表达式的括号表达式.因此,此方法调用的抽象语法树中此参数的节点将为括号表达式,而不是规范要求的lambda表达式.这就是为什么.

还有其他地方的Microsoft C#编译器违反规范并接受这样的表达式即使它不应该(根据规范),但这不是其中之一.

规范的相关部分是§6.5.

猜你在找的C#相关文章