2017-08-30 92 views
1

我有兩個單元測試,都是有效的。那麼,爲什麼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'。儘管開發者使用這個事實有點愚蠢。 –

回答

相關問題