Udostępnij za pośrednictwem


IComparer<T> Interfejs

Definicja

Definiuje metodę implementaną przez typ w celu porównania dwóch obiektów.

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)

Parametry typu

T

Typ obiektów do porównania.

Ten parametr typu jest kontrawariantny. Oznacza to, że możesz użyć typu, który został przez Ciebie określony, lub dowolnego typu, który jest mniej pochodny. Aby uzyskać więcej informacji o kowariancji i kontrawariancji, zobacz Kowariancja i kontrawariancja w typach ogólnych.
Pochodne

Przykłady

Poniższy przykład implementuje interfejs do IComparer<T> porównywania obiektów typu Box zgodnie z ich wymiarami. Ten przykład jest częścią większego przykładu udostępnionego Comparer<T> dla klasy .

// 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

Uwagi

Ten interfejs jest używany z metodami List<T>.Sort i List<T>.BinarySearch . Umożliwia dostosowanie kolejności sortowania kolekcji. Klasy implementujące ten interfejs obejmują SortedDictionary<TKey,TValue> klasy ogólne i SortedList<TKey,TValue> .

Domyślną implementacją tego interfejsu Comparer<T> jest klasa . Klasa StringComparer implementuje ten interfejs dla typu String.

Ten interfejs obsługuje porównywanie kolejności. Oznacza to, że gdy Compare metoda zwraca wartość 0, oznacza to, że dwa obiekty posortowane są takie same. Implementacja dokładnych porównań równości jest dostarczana przez IEqualityComparer<T> interfejs ogólny.

Zalecamy, aby pochodzić z Comparer<T> klasy zamiast implementowania interfejsu IComparer<T> , ponieważ Comparer<T> klasa zapewnia jawną implementację IComparer.Compare interfejsu metody i Default właściwość, która pobiera domyślny moduł porównujący dla obiektu.

Metody

Compare(T, T)

Porównuje dwa obiekty i zwraca wartość wskazującą, czy jedna jest mniejsza, równa lub większa niż druga.

Dotyczy

Zobacz też