は、次のコードを考えてみましょう:なぜこのように実装された短縮型のCompareToですか?
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);
}
実装されている示しメソッドは、このよう
public int CompareTo(int value)
{
if (this < value)
{
return -1;
}
if (this > value)
{
return 1;
}
return 0;
}
あなたの答えをありがとう。オーバーフローの問題については考えなかった。残念ながら、CompareToが常に-1、0、または1を返すと仮定して、多くのコードを含むレガシーアプリケーションを維持する必要があります。 – sloth
@dkson:レガシーコードを修正することをお勧めします。あなたが最終的にそれを修正するまで、そのような仮定は単純にあなたを噛み続けるでしょう。後ではなく早くやり直すことをお勧めします。また、元の開発者を教育します。 –