为什么Int16.CompareTo从Int32返回不同的结果.CompareTo

问题描述:

我有两个单元测试,都是有效的。那么,为什么Int16.CompateTo返回两个数字之间的差异,而Int32Int64CompareTo方法严格返回-1, 0, 1为什么Int16.CompareTo从Int32返回不同的结果.CompareTo

[TestMethod] 
public void Int16CompareTo() 
{ 
    Int16 value1 = 60; 
    Int16 value2 = 5; 
    var result = value1.CompareTo(value2); 
    Assert.AreEqual(result, 55); 
} 

[TestMethod] 
public void Int32CompareTo() 
{ 
    Int32 value1 = 60; 
    Int32 value2 = 5; 
    var result = value1.CompareTo(value2); 
    Assert.AreEqual(result, 1); 
} 
+3

因为他们实现方式不同,你的测试是错误的。 IComparable.CompareTo'的结果是负值,零或正值。它返回的*特定值*是实现定义的,不应该进行测试。 –

+2

参考源[有帮助文档](http://referencesource.microsoft.com/#mscorlib/system/int32.cs,49)为什么'Int32'和'Int64'不能简单地减去:来处理溢出。 'Int16'确实减去,并没有相同的问题,因为参数首先隐式地提升为'Int32'。尽管开发者使用这个事实有点愚蠢。 –

MSN文档反映了您正在接收的行为。所有的方法保证,如果数字较大,你会得到一个大于0的值。如果数字相等则为0,如果数字较小则为小于0。

如果你想我会覆盖该方法或为测试用例创建一个新的。

32位 https://msdn.microsoft.com/en-us/library/y2ky8xsk(v=vs.110).aspx

16位 https://msdn.microsoft.com/en-us/library/06x7xh8y(v=vs.110).aspx