IComparer<T> インターフェイス

定義

2 つのオブジェクトを比較するために型が実装するメソッドを定義します。Defines a method that a type implements to compare two objects.

generic <typename T>
public interface class IComparer
public interface IComparer<in T>
public interface IComparer<T>
type IComparer<'T> = interface
Public Interface IComparer(Of In T)
Public Interface IComparer(Of T)

型パラメーター

T

比較するオブジェクトの型。The type of objects to compare.

この型パラメーターは反変です。 つまり、指定した型、または弱い派生型のいずれかを使用することができます。 共変性および反変性の詳細については、「ジェネリックの共変性と反変性」をご覧ください。
派生

次の例では、IComparer<T> インターフェイスを実装して、Box 型のオブジェクトをそのディメンションに従って比較します。The following example implements the IComparer<T> interface to compare objects of type Box according to their dimensions. この例は、Comparer<T> クラス用に用意されている大規模な例の一部です。This example is part of a larger example provided for the Comparer<T> class.

// This class is not demonstrated in the Main method
// and is provided only to show how to implement
// the interface. It is recommended to derive
// from Comparer<T> instead of implementing IComparer<T>.
public class BoxComp : IComparer<Box>
{
    // Compares by Height, Length, and Width.
    public int Compare(Box x, Box y)
    {
        if (x.Height.CompareTo(y.Height) != 0)
        {
            return x.Height.CompareTo(y.Height);
        }
        else if (x.Length.CompareTo(y.Length) != 0)
        {
            return x.Length.CompareTo(y.Length);
        }
        else if (x.Width.CompareTo(y.Width) != 0)
        {
            return x.Width.CompareTo(y.Width);
        }
        else
        {
            return 0;
        }
    }
}
' This class is not demonstrated in the Main method
' and is provided only to show how to implement
' the interface. It is recommended to derive
' from Comparer<T> instead of implementing IComparer<T>.
Public Class BoxComp
    Implements IComparer(Of Box)
    ' Compares by Height, Length, and Width.
    Public Function Compare(ByVal x As Box, ByVal y As Box) As Integer Implements _
                                                IComparer(Of Box).Compare
        If x.Height.CompareTo(y.Height) <> 0 Then
            Return x.Height.CompareTo(y.Height)
        ElseIf x.Length.CompareTo(y.Length) <> 0 Then
            Return x.Length.CompareTo(y.Length)
        ElseIf x.Width.CompareTo(y.Width) <> 0 Then
            Return x.Width.CompareTo(y.Width)
        Else
            Return 0
        End If
    End Function
End Class

注釈

このインターフェイスは、List<T>.Sort および List<T>.BinarySearch メソッドと共に使用されます。This interface is used with the List<T>.Sort and List<T>.BinarySearch methods. コレクションの並べ替え順序をカスタマイズする方法を提供します。It provides a way to customize the sort order of a collection. このインターフェイスを実装するクラスには、SortedDictionary<TKey,TValue> および SortedList<TKey,TValue> ジェネリッククラスが含まれます。Classes that implement this interface include the SortedDictionary<TKey,TValue> and SortedList<TKey,TValue> generic classes.

このインターフェイスの既定の実装は Comparer<T> クラスです。The default implementation of this interface is the Comparer<T> class. StringComparer クラスは、型 Stringに対してこのインターフェイスを実装します。The StringComparer class implements this interface for type String.

このインターフェイスは、順序の比較をサポートしています。This interface supports ordering comparisons. つまり、Compare メソッドが0を返した場合、2つのオブジェクトが同じで並べ替えられることを意味します。That is, when the Compare method returns 0, it means that two objects sort the same. 厳密な等価比較の実装は、IEqualityComparer<T> ジェネリックインターフェイスによって提供されます。Implementation of exact equality comparisons is provided by the IEqualityComparer<T> generic interface.

Comparer<T> クラスは IComparer.Compare メソッドの明示的なインターフェイス実装と、オブジェクトの既定の比較子を取得する Default プロパティを提供するため、IComparer<T> インターフェイスを実装するのではなく、Comparer<T> クラスから派生させることをお勧めします。We recommend that you derive from the Comparer<T> class instead of implementing the IComparer<T> interface, because the Comparer<T> class provides an explicit interface implementation of the IComparer.Compare method and the Default property that gets the default comparer for the object.

メソッド

Compare(T, T)

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

適用対象

こちらもご覧ください