我可以在整数上使用coalesce运算符来链接CompareTo吗?

Mat*_*ers 6 c# coalesce

我想做这样的事情:

public override int CompareTo (Foo rhs)
{
    return Bar.CompareTo(rhs.Bar) ??
           Baz.CompareTo(rhs.Baz) ??
           Fuz.CompareTo(rhs.Fuz) ?? 0;
}
Run Code Online (Sandbox Code Playgroud)

这不起作用; 是否有一些最小的解决方法使它工作?基本上我希望0链到非零(或链的末尾).

dri*_*iis 3

该语言不支持。但是你可以写一个像这样的小助手:

public override int CompareTo (Foo rhs)
{
    return FirstNonZeroValue(
        () => Bar.CompareTo(rhs.Bar), 
        () => Baz.CompareTo(rhs.Baz),
        () => Fuz.CompareTo(rhs.Fuz));
}

private int FirstNonZeroValue(params Func<int>[] comparisons)
{
    return comparisons.Select(x => x()).FirstOrDefault(x => x != 0);
}
Run Code Online (Sandbox Code Playgroud)