gpt4 book ai didi

c# - IComparable.CompareTo() 返回值?

转载 作者:太空狗 更新时间:2023-10-30 00:50:34 24 4
gpt4 key购买 nike

关于 IComparable<T>.CompareTo() 的一个奇怪问题方法;我知道该方法需要根据比较结果返回正数、负数或零,但在前两种情况下我返回什么真的重要吗?换句话说,如果我返回 +1 或 +1000 会有什么不同吗?

最佳答案

答案是:

IComparable<T>.CompareTo() 返回 sbyte, short, ushort, char减法结果类型,而它返回 -1,0 或 1 作为 int 的类型, long , string等等。

var result = ((byte)10).CompareTo((byte)2); // 8
var result = ((short)1).CompareTo((byte)11); // -10
var result = ((int)10).CompareTo((int)11); // 1 ??

原因:

首先,让我们看一下方法的签名:

int CompareTo( T other )

如您所见,返回类型为 Int32 .

很明显,开发人员想要返回值的差异。但是,Int32 的返回类型减法可以小于Int32.MinValue或大于 Int32.MaxValue .举个例子:

// Return type is less than minimum int value  (-4294967296)
(Int32.MinValue).CompareTo(Int32.MaxValue)

// Return type is greater than maximum int value (4294967296)
(Int32.MaxValue).CompareTo(Int32.MinValue)

因此,他们决定为具有“小”值范围的类型返回减法结果,而不是方法的返回类型 Int32。在那种情况下。

最后,您可以从 here 查看该方法在所有类型中的实现。 :

Here is the Int16 implementation :

   public int CompareTo(Int16 value) {
return m_value - value;
}

Here is the Int32 implementation:

public int CompareTo(int value) {
// Need to use compare because subtraction will wrap
// to positive for very large neg numbers, etc.
if (m_value < value) return -1;
if (m_value > value) return 1;
return 0;
}

最后:

但是,当然,将来他们可以更改该代码的实现,推荐的方法是始终按照 msdn 中的说明将结果与 1、0 或 -1 进行比较。

小于零(此实例在排序顺序中位于其他实例之前。)
(此实例与其他实例出现在排序顺序中的相同位置。)
大于零(此实例在排序顺序中位于其他实例之后。)

关于c# - IComparable<T>.CompareTo() 返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31104425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com