C#中short的CompareTo()方法
Posted
技术标签:
【中文标题】C#中short的CompareTo()方法【英文标题】:CompareTo() method of short in C# 【发布时间】:2020-11-12 14:15:20 【问题描述】:我想在 C# 中使用CompareTo()
方法。当我将它与 long
和 int
数据类型一起使用时,comare 结果是 always -1, 0, 1
。
数据类型short
呢?当我比较两个值(小于、大于)时,结果总是一个值取决于比较给定的值,但不是-1, 0, 1
.
我使用 .Net 框架,而不是 .Net 代码。
【问题讨论】:
documentation 很清楚。 "小于零:实例小于value
"、"零:实例等于value
"、"大于零:实例大于value
"
【参考方案1】:
这些实现细节是为了性能。请注意,CompareTo
必须只返回 negative、positive 或 zero 值,例如 -123
、456
、0
;没必要-1
、1
、0
。
现在让我们看看实现。对于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
当我们有int
或long
进行比较时,我们不能只是减去;这是一个反例:
int.MinValue - 1 == some positive number! It means that MinValue > 1
我们必须比较
// Pseudocode
CompareTo() =>
a == b ? 0
: a < b ? - 1
: 1;
【讨论】:
以上是关于C#中short的CompareTo()方法的主要内容,如果未能解决你的问题,请参考以下文章