IComparer<T> Interfejs
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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. |