9

C# 7 中的新ValueTuple类型实现了 ,但我能找到的关于其实现IComparable的唯一文档CompareTo只是说明' 的返回值表示“按排序顺序”的相对位置。它没有说明实际上所指的“排序顺序”是什么。

通过检查源,我可以发现顺序是我所期望的 - 它委托比较第一个字段的默认值Comparer,然后一次使用其他字段,以便打破平局。但是,我不希望在不保证它不被视为可以在不违反规范的情况下更改的实现细节的情况下依赖它。

这种行为实际上是否记录在任何地方?

4

1 回答 1

8

根据源码CompareTo调用Compare默认比较器的方法

    public int CompareTo(ValueTuple<T1, T2, T3> other)
    {
        int c = Comparer<T1>.Default.Compare(Item1, other.Item1);
        if (c != 0) return c;

        c = Comparer<T2>.Default.Compare(Item2, other.Item2);
        if (c != 0) return c;

        return Comparer<T3>.Default.Compare(Item3, other.Item3);
    }

但您可以明确提供客户比较器

int IStructuralComparable.CompareTo(object other, IComparer comparer)
于 2017-10-18T06:07:11.173 回答