1
2つのユニットテストがあり、どちらも有効です。だから、なぜInt16.CompateTo
が2つの数値の差を返すのですが、Int32
とInt64
CompareTo
メソッドは厳密には-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);
}
。 'IComparable.CompareTo'の結果は負、ゼロまたは正です。返される*特定の値*は実装定義であり、テストするべきではありません。 –
参照元[helpfully documents](http://referencesource.microsoft.com/#mscorlib/system/int32.cs,49)なぜ 'Int32'と' Int64'は単にオーバーフローを処理するだけではないのですか? 'Int16'は減算され、引数が暗黙的に' Int32'に昇格するので、同じ問題はありません。その事実を使用するのは開発者の方が少し愚かですが。 –