考虑以下代码:
namespace ConsoleApplication1 {
class Program
{
static void Main(string[] args)
{
Console.WriteLine(100.CompareTo(200)); // prints -1
Console.WriteLine(((decimal)100).CompareTo((decimal)200)); // prints -1
Console.WriteLine(((short)100).CompareTo((short)200)); // prints -100
Console.WriteLine(((float)100).CompareTo((float)200)); // prints -1
Console.ReadKey();
}
}
}
我的问题是,Int16 上的 CompareTo 方法返回 -1、0 和 1 以外的值是否有任何具体原因?
ILSpy显示它是这样实现的
public int CompareTo(short value)
{
return (int)(this - value);
}
而该方法是这样在 Int32 上实现的
public int CompareTo(int value)
{
if (this < value)
{
return -1;
}
if (this > value)
{
return 1;
}
return 0;
}
不同之处在于,对于short
,结果不可能溢出。例如,short.MinValue - (short) 1
仍然是负数 - 而int.MinValue - 1
is int.MaxValue
.
换句话说,具体原因是你可以通过捷径逃脱short
(没有双关语)而相同的快捷方式不适用于int
。你绝对不应该require IComparable<T>.CompareTo http://msdn.microsoft.com/en-us/library/43hc6wht.aspx返回 -1、0 或 1 的实现。文档非常清楚,结果仅在负数、零或正数方面才有意义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)