2015-09-22 13 views
6

This answer a un'altra mia domanda non è stata compilata, anche se in superficie sembra che dovrebbe (questa non è la stessa domanda, posso riscrivere l'altra risposta a lavorare per la mia altra domanda).Null Coalescence and Lambdas

Dato

private Func<MyT, bool> SegmentFilter { get; set; } 

public MyConstructor(Func<MyT, bool> segmentFilter = null) 
{ 
    // This does not compile 
    // Type or namespace mas could not be found 
    SegmentFilter = segmentFilter ?? (mas) => { return true; }; 

    // This (equivalent?) form compiles just fine 
    if (segmentFilter == null) 
    { 
     SegmentFilter = (mas) => { return true; }; 
    } 
    else 
    { 
     SegmentFilter = segmentFilter; 
    } 
} 

Perché il compilatore in esecuzione nei guai con l'operatore coalescente nulla, ma non con la se la versione priva di sintassi zucchero/altro?

risposta

9

Questo perché ?? ha precedenza superiore a =>. Puoi facilmente risolvere il problema avvolgendo il tuo lambda in ():

SegmentFilter = segmentFilter ?? ((mas) => { return true; }); 
+0

Grazie. Anche la "altra" risposta era tua. L'ho modificato per renderlo compilato ;-) –