我希望您能提供一个好的解释,说明为什么一段代码无法编译,而另一段代码可以顺利编译。
失败的代码:
失败的代码:
richTextBox1.Invoke(new MethodInvoker((() => { richTextBox1.AppendText("test"); })));
出现错误:
期望方法名
在MethodInvoker(
后的左括号上,报错了。显然我不能把lambda语句放在括号中。
编译通过:
richTextBox1.Invoke(new MethodInvoker(() => { richTextBox1.AppendText("test"); }));
问题是 - 为什么?
我一直认为,如果需要的话,可以在任何方法参数周围加上括号,但显然对于lambda表达式并非如此。我知道它们有点特殊,但我仍然看不到一个好的理由。也许我对语法有所误解。我真的很想弄清楚。
顺便说一下,这在VS2008、.NET 3.5 SP1中存在,我还没有在VS2010和.NET 4中进行测试。
Func<int> F() { return (() => 1); }
是合法的,但根据规范来说不应该这样做。 - jason