2010-07-10 27 views
7

Ben Yapıcı içinde yazmaya çalışan aşağıdaki koda göz atın:Boş coalescing operatörü ve lambda ifadesi

private Predicate<string> _isValid; 

//... 

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

kod derleme değil - sadece "geçersiz ifade dönem" ler ve böylece bir. derliyor ve ben sadece kullanabilirsiniz aksine

: Bu sözdizimi izin verilmemesinin sebebi

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

Ancak, ben hala merak ediyorum.

Herhangi bir fikrin var mı?

cevap

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

çalışacak mı :)

O bunu şu şekilde çözümlenir:

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

herhangi bir anlam ifade etmeyen.

+0

Evet - öyle. Teşekkürler! Öncelikler hakkında düşünmedim. – Matthias

1

Kontrol dışarı C# dilbilgisi bu kısmı: null-coalescing-expression yana

 
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 

bir simple-name olarak ayrıştırmak olacaktır örnekte conditional-or-expressions ile sonlanır. Parantez içinde sarılarak, daha sonra parenthesized-expression olarak ayrıştırılabilir.

İlgili konular