Comparer<T>.IComparer.Compare(Object, Object) メソッド


2 つのオブジェクトを比較して、一方が他方より小さいか、同じか、または大きいかを示す値を返します。Compares two objects and returns a value indicating whether one is less than, equal to, or greater than the other.

 virtual int System.Collections.IComparer.Compare(System::Object ^ x, System::Object ^ y) = System::Collections::IComparer::Compare;
int IComparer.Compare (object x, object y);
abstract member System.Collections.IComparer.Compare : obj * obj -> int
override this.System.Collections.IComparer.Compare : obj * obj -> int
Function Compare (x As Object, y As Object) As Integer Implements IComparer.Compare



比較する最初のオブジェクト。The first object to compare.


比較する 2 番目のオブジェクト。The second object to compare.



xy の相対値を示す符号付き整数。次の表を参照してください。A signed integer that indicates the relative values of x and y, as shown in the following table.

Value 意味Meaning
ゼロより小さいLess than zero xyがスローされます。x is less than y.
ゼロZero xy は等しい。x equals y.
ゼロより大きいGreater than zero xyがスローされます。x is greater than y.



x または y が、T 型にキャストできない型です。x or y is of a type that cannot be cast to type T.

または-or- x および y が、IComparable<T> ジェネリック インターフェイスと IComparable インターフェイスのいずれも実装していません。x and y do not implement either the IComparable<T> generic interface or the IComparable interface.

次の例は、IComparer.Compare メソッドを使用して2つのオブジェクトを比較する方法を示しています。The following example shows how to use the IComparer.Compare method to compare two objects. この例は、Comparer<T> クラス用に用意されている大規模な例の一部です。This example is part of a larger example provided for the Comparer<T> class.

// This explicit interface implementation
// compares first by the length.
// Returns -1 because the length of BoxA
// is less than the length of BoxB.
BoxLengthFirst LengthFirst = new BoxLengthFirst();

Comparer<Box> bc = (Comparer<Box>) LengthFirst;

Box BoxA = new Box(2, 6, 8);
Box BoxB = new Box(10, 12, 14);
int x = LengthFirst.Compare(BoxA, BoxB);

' This explicit interface implementation
' compares first by the length.
' Returns -1 because the length of BoxA
' is less than the length of BoxB.
Dim LengthFirst As New BoxLengthFirst()

Dim bc As Comparer(Of Box) = CType(LengthFirst, Comparer(Of Box))

Dim BoxA As New Box(2, 6, 8)
Dim BoxB As New Box(10, 12, 14)
Dim x As Integer = LengthFirst.Compare(BoxA, BoxB)


このメソッドは Compare(T, T) メソッドのラッパーであるため、obj は現在のインスタンスのジェネリック引数 T によって指定された型にキャストする必要があります。This method is a wrapper for the Compare(T, T) method, so obj must be cast to the type specified by the generic argument T of the current instance. Tにキャストできない場合は、ArgumentException がスローされます。If it cannot be cast to T, an ArgumentException is thrown.

参照型と null を比較することはできますが、例外は生成されません。Comparing null with any reference type is allowed and does not generate an exception. 並べ替えを行う場合、null は他のオブジェクトより小さいと見なされます。When sorting, null is considered to be less than any other object.

注意 (呼び出し元)

Compare(T, T)System.Collections.Generic.EqualityComparer`1.Equals(\`0,\`0) の動作は、カルチャの区別と大文字小文字の区別の点で異なります。 Compare(T, T) and System.Collections.Generic.EqualityComparer`1.Equals(\`0,\`0) behave differently in terms of culture-sensitivity and case-sensitivity. 文字列比較の場合は、比較子<文字列>より StringComparer クラスを使用することをお勧めします。For string comparisons, the StringComparer class is recommended over Comparer<String>. StringComparer クラスのプロパティは、カルチャの区別と大文字と小文字の区別の組み合わせが異なる文字列比較を実行する定義済みのインスタンスを返します。Properties of the StringComparer class return predefined instances that perform string comparisons with different combinations of culture-sensitivity and case-sensitivity. 大文字と小文字の区別およびカルチャの区別は、同じ StringComparer インスタンスのメンバー間で一貫しています。The case-sensitivity and culture-sensitivity are consistent among the members of the same StringComparer instance. カルチャ固有の比較の詳細については、System.Globalization 名前空間と[グローバリゼーションおよびローカリゼーション](/dotnet/standard/globalization-localization/)に関する説明を参照してください。For more information on culture-specific comparisons, see the System.Globalization namespace and [Globalization and Localization](/dotnet/standard/globalization-localization/).