This answer对我的另一个问题没有编译,虽然从表面看似乎应该(这不是同一个问题,我可以重写另一个答案为我的另一个问题工作)。
给出
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;
}
}
为什么编译器在使用null coalescent运算符时遇到了麻烦,但是没有使用syntax-sugar-free if / else版本?
答案 0 :(得分:9)
这是因为??
的优先级高于=>
。你可以通过将lambda包装到()
:
SegmentFilter = segmentFilter ?? ((mas) => { return true; });