C#中short的CompareTo方法

问题描述

我想在C#中使用instantiateViewController(withIdentifier:)方法。当我将其与with q as ( SELECT [numbers],[product_ID],cast(a.numbers as float) / coalesce(b.numbers,null) ratio FROM [tablename] a CROSS JOIN [tablename] b ) select * from q where ratio = cast(ratio as bigint) and ratio > 1 Compareto()数据类型一起使用时,comare结果总是 long。 数据类型int呢?当我比较两个值(小于,大于)时,结果总是 一个依赖的值,该值取决于比较的给定值,但不是 {{1 }}。

我使用.Net Framework,而不是.Net代码

解决方法

这些实现细节用于实现性能。请注意,CompareTo必须仅返回值,例如-123,{{1} },456;不需要0-11

现在让我们看一下实现。对于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];当我们减去这些值时,它们将被 cast [-32768..32767]中。请注意,我们保证没有整数溢出

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