MSDNのドキュメントには次のように書かれているので、私は疑問に思っています:
ゼロ未満: このインスタンスは値未満です。
ゼロ: このインスタンスは値と等しいです。
ゼロより大きい: このインスタンスは値より大きいです。
値が小さいか、等しいか、大きいかだけを比較したい場合は、-1、0、1 を使用してみませんか?
ここで考慮すべきことが 2 つあります。
実際の実装では、現在、常に -1、0、または 1 が返される可能性があり、それ以外は返されません。私はこれを確認していないことに注意してください。
ただし、ドキュメントでは、-1 と +1 だけでなく、負の値と正の値を使用することは合法であると指定されています。
これは、 を使用して堅牢なコードを記述するには.CompareTo
、-1 と +1 だけでなく、負と正の値を処理する必要があることを意味します。
これは、独自の の実装から -1 および +1 を返すことができないという意味ではありませんがCompareTo
、他の値についても同様に準備する必要があることに注意してください。
簡単にするために、場合によっては、ある値を別の値から減算した結果を実装が返すだけで、-1 または +1 ではない値が得られます。
この質問はおそらく大まかですが、私が書いたので、少なくとも私の会社で使用されているそのような実装の多くを知っています:
public int CompareTo(Student other)
{
return this.Grade - student.Grade;
}
、CompareTo
などのタイプの実装を見ると、次のようになります。Byte
Int16
public int CompareTo(short value)
{
return (this - value);
}
Int32
またはInt64
比較は同じ方法で実装されていません。更新:@ORMapperが気付いたように、算術オーバーフローが原因です。
私が理解しているように、たくさんあります(特にユーザー定義のもの)。MSDNは、それに依存するべきではないため、非特定です。CompareToから得られる値は、それが有効である限り、実際には重要ではありません。たとえば、2つint
のsを比較することは、それらを減算することによって最も速くなります。
実際の例では、このプログラムはを出力し88
ます。
static void Main(string[] args)
{
Int16 a = 100;
Int16 b = 12;
Console.WriteLine(a.CompareTo(b));
}
この小さな調査をしていると、最初は少し奇妙に思えたものを見つけました。Int16
(short
)はこのメソッドを使用しますが、Int32
(int
)は使用せず、、、を-1
返し0
ます1
。これはおそらくInt32
、最小値から最大値を引いた値が適合する戻り型()よりも小さい整数を処理しているという事実によるものです。