簡體   English   中英

Null-coalescing運算符和lambda表達式

[英]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-expressionconditional-or-expression null-coalescing-expression結尾,因此示例中的s將解析為simple-name 通過將其包裝在括號中,然后可以將其解析為帶parenthesized-expression

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM