c# – 为什么在lambda语句周围的括号会引起语法错误?
发布时间:2020-12-15 06:41:00 所属栏目:百科 来源:网络整理
导读:我正在寻找一个很好的解释为什么一个代码无法编译,而其他的编译很好. 失败: richTextBox1.Invoke(new MethodInvoker((() = { richTextBox1.AppendText("test"); }))); 给出错误 Method name expected 在MethodInvoker之后的右括号上(.显然,我不能将lambda语
我正在寻找一个很好的解释为什么一个代码无法编译,而其他的编译很好.
失败: richTextBox1.Invoke(new MethodInvoker((() => { richTextBox1.AppendText("test"); }))); 给出错误
在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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |