2015-09-22 19 views
6

This answer cho một câu hỏi khác của tôi không biên dịch, mặc dù trên bề mặt có vẻ như nó nên (đây không phải là cùng một câu hỏi, tôi có thể viết lại câu trả lời khác để làm việc cho câu hỏi khác của tôi).Null Coalescence và Lambdas

Với

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; 
    } 
} 

Tại sao trình biên dịch chạy vào rắc rối với các nhà điều hành coalescent null, nhưng không phải với nếu/phiên bản khác cú pháp-đường-miễn phí?

Trả lời

9

Đó là vì ?? có mức độ ưu tiên cao hơn =>. Bạn có thể dễ dàng khắc phục điều đó bằng cách gói lambda của bạn vào ():

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

Cảm ơn. Câu trả lời "khác" cũng là của bạn. Tôi chỉnh sửa nó để làm cho nó biên dịch ;-) –