C#中short的CompareTo()方法

Posted

技术标签:

【中文标题】C#中short的CompareTo()方法【英文标题】:CompareTo() method of short in C# 【发布时间】:2020-11-12 14:15:20 【问题描述】:

我想在 C# 中使用CompareTo() 方法。当我将它与 longint 数据类型一起使用时,comare 结果是 always -1, 0, 1。 数据类型short 呢?当我比较两个值(小于、大于)时,结果总是一个值取决于比较给定的值,但不是-1, 0, 1 .

我使用 .Net 框架,而不是 .Net 代码。

【问题讨论】:

documentation 很清楚。 "小于零:实例小于value"、"零:实例等于value"、"大于零:实例大于value" 【参考方案1】:

这些实现细节是为了性能。请注意,CompareTo 必须只返回 negativepositivezero 值,例如 -1234560;没必要-110

现在让我们看看实现。对于Short(和Byte),我们可以减去,这就足够了:

// Pseudocode
CompareTo() => a - b;

例如

(short)456 - (short)123 == 333 > 0 // so 456 > 123
 (byte)5 - (byte)7      ==  -2 < 0 // so   5 < 7

发生了什么事?对于short 类型,值在[short.MinValue..short.MaxValue] 范围内,即[-32768..32767];当我们减去这些值时,它们将被 cast 转换为 int。请注意,我们保证不会出现整数溢出

-32768 - 32767  == -65535 // min possible value, which is > int.MinValue
 32767 - -32768 ==  65535 // max possible value, which is < int.MaxValue

当我们有intlong 进行比较时,我们不能只是减去;这是一个反例

int.MinValue - 1 == some positive number! It means that MinValue > 1

我们必须比较

// Pseudocode
CompareTo() => 
    a == b ? 0
  : a < b ? - 1
  : 1;

【讨论】:

以上是关于C#中short的CompareTo()方法的主要内容,如果未能解决你的问题,请参考以下文章

C# CompareTo 和 String.Compare

c# byte 数组 转 short数组

如何以及何时在 C# 中使用 :short?

Java compare方法和compareTo方法

如何在 C# 中比较两个版本?

C# 字符串比较