空合并运算符和 lambda 表达式
看一下我尝试在构造函数内编写的以下代码:
private Predicate<string> _isValid;
//...
Predicate<string> isValid = //...;
this._isValid = isValid ?? s => true;
该代码无法编译 - 只是“无效的表达式术语”等等。
相比之下,它确实可以编译,我可以使用它:
this._isValid = isValid ?? new Predicate<string>(s => true);
但是,我仍然想知道为什么不允许这种语法。
有什么想法吗?
take a look at the following code I attempted to write inside a constructor:
private Predicate<string> _isValid;
//...
Predicate<string> isValid = //...;
this._isValid = isValid ?? s => true;
The code doesn't compile - just "invalid expression term"s and so one.
In contrast that does compile and I could just use it:
this._isValid = isValid ?? new Predicate<string>(s => true);
However, I still wonder why this syntax is not allowed.
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
会起作用的:)
它是这样解析的:
这没有任何意义。
Will work :)
It parsed it this way:
which does not make any sense.
查看 C# 语法的这一部分:
由于
null-coalescing-expression
以conditional-or-expression
终止,因此示例中的s
将解析作为简单名称
。通过将其括在括号中,可以将其解析为括号表达式。Check out this portion of the C# grammar:
Since
null-coalescing-expression
terminates withconditional-or-expression
thes
in your example will parse as asimple-name
. By wrapping it in parentheses it can then be parsed as aparenthesized-expression
.