我想做这样的事情:
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链到非零(或链的末尾).
该语言不支持。但是你可以写一个像这样的小助手:
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)
| 归档时间: |
|
| 查看次数: |
600 次 |
| 最近记录: |