IComparer<T> Интерфейс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Определяет метод, реализующий тип для сравнения двух объектов.
generic <typename T>
public interface class IComparer
public interface IComparer<in T>
public interface IComparer<in T> where T : allows ref struct
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>.BinarySearch методамиList<T>.Sort. Он предоставляет способ настройки порядка сортировки коллекции. Классы, реализующие этот интерфейс, включают и SortedList<TKey,TValue> универсальные SortedDictionary<TKey,TValue> классы.
Реализация этого интерфейса по умолчанию — Comparer<T> это класс. Класс StringComparer реализует этот интерфейс для типа String.
Этот интерфейс поддерживает сравнение заказов. То есть, когда Compare метод возвращает значение 0, это означает, что два объекта сортируются одинаково. Реализация точных сравнений равенства обеспечивается универсальным интерфейсом IEqualityComparer<T> .
Рекомендуется производный от Comparer<T> класса вместо реализации IComparer<T> интерфейса, так как Comparer<T> класс предоставляет явную реализацию IComparer.Compare интерфейса метода и Default свойство, которое получает средство сравнения по умолчанию для объекта.
Методы
| Имя | Описание |
|---|---|
| Compare(T, T) |
Сравнивает два объекта и возвращает значение, указывающее, меньше ли одно, равно или больше другого. |