![](/img/trans.png)
[英]null-coalescing operator with wildcard in a lambda expression
[英]Null-coalescing operator and lambda expression
看看我試圖在構造函數中編寫的以下代碼:
private Predicate<string> _isValid;
//...
Predicate<string> isValid = //...;
this._isValid = isValid ?? s => true;
代碼不能編譯 - 只是“無效的表達式術語”等等。
相比之下,編譯,我可以使用它:
this._isValid = isValid ?? new Predicate<string>(s => true);
但是,我仍然想知道為什么不允許這種語法。
有任何想法嗎?
this._isValid = isValid ?? (s => true);
將工作 :)
它以這種方式解析它:
this._isValid = (isValid ?? s) => true;
這沒有任何意義。
看看這部分C#語法:
parenthesized-expression: ( expression ) ..... simple-name: identifier type-argument-listopt ..... conditional-or-expression: conditional-and-expression conditional-or-expression || conditional-and-expression null-coalescing-expression: conditional-or-expression conditional-or-expression ?? null-coalescing-expression conditional-expression: null-coalescing-expression null-coalescing-expression ? expression : expression lambda-expression: anonymous-function-signature => anonymous-function-body
由於null-coalescing-expression
以conditional-or-expression
null-coalescing-expression
結尾,因此示例中的s
將解析為simple-name
。 通過將其包裝在括號中,然后可以將其解析為帶parenthesized-expression
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.