Jac*_*ter 16 c# compiler-construction lambda
为什么这个lambda表达式不能编译?
Action a = () => throw new InvalidOperationException();
Run Code Online (Sandbox Code Playgroud)
猜想很好,但我非常感谢对C#语言规范或其他文档的引用.
是的,我知道以下是有效的,并将编译:
Action a = () => { throw new InvalidOperationException(); };
Run Code Online (Sandbox Code Playgroud)
我将使用此类内容的上下文在此博客文章中进行了描述.
Jon*_*eet 19
嗯.我有答案,但不是很好.
我不相信有一个"抛出"的表达.有一个抛出语句,但不只是一个表达式.将其与"Console.WriteLine()"进行比较,后者是具有void类型的方法调用表达式.
作为并行,你不能将switch语句或if语句等作为lambda的主体.您只能有表达式或块(第7.14节).
这有什么帮助吗?
lep*_*pie 15
这是我的看法:
throw 是一种陈述,而不是一种表达.
参考:
12.3.3.11抛出语句
对于表单的语句stmt
throw expr;expr开头的v的明确赋值状态与stmt开头的v的明确赋值状态相同.
为了解释这个本质,也许人们应该考虑C#lambda结构中表达式的含义.它只是语法糖:
delegate () { return XXX; }
Run Code Online (Sandbox Code Playgroud)
哪里XXX是表达
| 归档时间: |
|
| 查看次数: |
4660 次 |
| 最近记录: |