c# - System.ValueTuple 的排序顺序是官方指定的吗?在哪里?

标签 c# c#-7.0 valuetuple

C# 7 中新的 ValueTuple 类型实现了 IComparable,但唯一的 documentation我已经能够在他们的实现中找到这简单地说明 CompareTo 的返回值指示“按排序顺序”的相对位置。它没有说明实际提到的“排序顺序”是什么。

通过检查源代码,我可以发现顺序是我所期望的 - 它委托(delegate)使用默认的 Comparer 比较第一个字段,然后一次使用一个其他字段,在秩序,断绝关系。但是,如果不能保证它不被视为可以在不违反规范的情况下更改的实现细节,我宁愿不依赖于此。

这种行为实际上在任何地方都有记录吗?

最佳答案

根据source code , 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)

关于c# - System.ValueTuple 的排序顺序是官方指定的吗?在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46803561/

相关文章:

c# - 来自同一张表的 3 个不同的不同值

c# - 从 Windows 窗体应用程序安装另一个应用程序

c# - 模式匹配优先于引用还是值相等?

c# - 为什么 is type/is var 对 null 产生不同的结果?

c# - 无法使用从 skydrive 获取的文件流来创建 BitmapImage

c# - 基础平台游戏 Rectangle based collision problems

c# - 类型 T 的表达式不能由类型 X 的模式处理

c# - ValueTuple 不支持 DisplayMemberPath。组合框,WPF

c# - 从 ref 变量解构元组

c# - 值元组类型模式