2010-07-10 66 views
7

看看下面的代碼我試圖在構造函數中寫:空,合併運算和lambda表達式

private Predicate<string> _isValid; 

//... 

Predicate<string> isValid = //...; 
this._isValid = isValid ?? s => true; 

的代碼不編譯 - 只是「無效的表達術語」 S和SO之一。

相反,它編譯,我可以只使用它:

this._isValid = isValid ?? new Predicate<string>(s => true); 

但是,我仍然不知道爲什麼這個語法是不允許的。

任何想法?

回答

9
this._isValid = isValid ?? (s => true); 

將工作:)

據分析是這樣:

this._isValid = (isValid ?? s) => true; 

不作任何意義。

+0

是的 - 確實如此。謝謝!我沒有考慮優先事項。 – Matthias 2010-07-10 06:46:47

1

退房的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終止與你的榜樣將解析爲simple-nameconditional-or-expressions。通過將其包裝在圓括號中,可以將其解析爲parenthesized-expression