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/