Dyp*_*ppl 10 c# lambda syntax-error visual-studio-2008 c#-3.0
我正在寻找一个很好的解释为什么一段代码无法编译而另一段编译就好了.
失败:
richTextBox1.Invoke(new MethodInvoker((() => { richTextBox1.AppendText("test"); })));
Run Code Online (Sandbox Code Playgroud)
给出错误
预期的方法名称
在后面的左括号上MethodInvoker(
.显然,我不能用括号括起我的lambda语句.
编译:
richTextBox1.Invoke(new MethodInvoker(() => { richTextBox1.AppendText("test"); }));
Run Code Online (Sandbox Code Playgroud)
问题是 - 为什么?
我总是理所当然地认为如果我想要的话我可以在括号中包装任何方法参数,但显然不是lambda表达式的情况.我知道它们有点特别,但我仍然看不出有充分的理由.也许我对语法一无所知.我真的很想得到它.
顺便说一下,这出现在VS2008,.NET 3.5 SP1中,我还没有在VS2010和.NET 4中测试它.
它不是lambda表达式,它是包含lambda表达式的带括号的表达式.因此,此方法调用的抽象语法树中此参数的节点将是带括号的表达式,而不是规范要求的lambda表达式.这就是为什么.
在其他地方,Microsoft C#编译器确实违反了规范并接受了这样的表达式,即使它不应该(根据规范),但这不是其中之一.
规范的相关部分是§6.5.
归档时间: |
|
查看次数: |
1322 次 |
最近记录: |