Нулевая Коалесценция и лямбда

ответ к другому моему вопросу не компилировался, хотя на поверхности кажется, что это должно (это не тот же вопрос, я могу переписать другой ответ, чтобы работать для моего другого вопроса).

дано

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

почему компилятор сталкивается с проблемой с нулевым коалесцентным оператором, но не с синтаксической версией if/else без сахара?

1 ответов


потому что ?? имеет более высокий приоритет, чем =>. Вы можете легко исправить это, обернув свою лямбду в ():

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