Поделиться через


IComparer<T> Интерфейс

Определение

Определяет метод, реализуемый типом для сравнения двух объектов.

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

Тип объектов для сравнения.

Это контравариантный параметр типа. Это означает, что вы можете использовать любой из указанных типов или любой тип, являющийся менее производным. Дополнительные сведения о ковариантности и контрвариантности см. в статье Ковариантность и контрвариантность в универсальных шаблонах.
Производный

Примеры

В следующем примере реализуется IComparer<T> интерфейс для сравнения объектов типа Box в соответствии с их измерениями. Этот пример является частью более крупного примера, предоставленного Comparer<T> для класса .

// 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 . Он предоставляет способ настройки порядка сортировки коллекции. Классы, реализующие этот интерфейс, включают универсальные SortedDictionary<TKey,TValue> классы и SortedList<TKey,TValue> .

Реализация этого интерфейса по умолчанию — Comparer<T> класс . Класс StringComparer реализует этот интерфейс для типа String.

Этот интерфейс поддерживает сравнение упорядочения. То есть, когда Compare метод возвращает значение 0, это означает, что два объекта сортируются одинаково. Реализация точных сравнений на равенство обеспечивается универсальным интерфейсом IEqualityComparer<T> .

Рекомендуется наследовать от Comparer<T> класса вместо реализации IComparer<T> интерфейса , так как Comparer<T> класс предоставляет явную реализацию IComparer.Compare интерфейса метода и Default свойство , которое получает компаратор по умолчанию для объекта .

Методы

Compare(T, T)

Сравнение двух объектов и возврат значения, указывающего, является ли один объект меньшим, равным или большим другого.

Применяется к

См. также раздел