Comparer<T>.IComparer.Compare(Object, Object) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Сравнивает два объекта и возвращает значение, указывающее, меньше ли одно, равно или больше другого.
virtual int System.Collections.IComparer.Compare(System::Object ^ x, System::Object ^ y) = System::Collections::IComparer::Compare;
int IComparer.Compare(object x, object y);
abstract member System.Collections.IComparer.Compare : obj * obj -> int
override this.System.Collections.IComparer.Compare : obj * obj -> int
Function Compare (x As Object, y As Object) As Integer Implements IComparer.Compare
Параметры
- x
- Object
Первый объект для сравнения.
- y
- Object
Второй объект для сравнения.
Возвращаемое значение
Целое число со знаком, указывающее относительные значения x и y, как показано в следующей таблице.
| Ценность | Смысл |
|---|---|
| Меньше нуля |
x меньше y.
|
| Нуля |
x равно y.
|
| Больше нуля |
x больше y.
|
Реализации
Исключения
x или y тип, который не может быть приведение к типу T.
–или–
x и y не реализуйте универсальный IComparable<T> интерфейс или IComparable интерфейс.
Примеры
В следующем примере показано, как использовать IComparer.Compare метод для сравнения двух объектов. Этот пример является частью более крупного примера, предоставленного Comparer<T> для класса.
// This explicit interface implementation
// compares first by the length.
// Returns -1 because the length of BoxA
// is less than the length of BoxB.
BoxLengthFirst LengthFirst = new BoxLengthFirst();
Comparer<Box> bc = (Comparer<Box>) LengthFirst;
Box BoxA = new Box(2, 6, 8);
Box BoxB = new Box(10, 12, 14);
int x = LengthFirst.Compare(BoxA, BoxB);
Console.WriteLine();
Console.WriteLine(x.ToString());
// This explicit interface implementation
// compares first by the length.
// Returns -1 because the length of BoxA
// is less than the length of BoxB.
let LengthFirst = BoxLengthFirst()
let bc = LengthFirst :> Comparer<Box>
let BoxA = Box(2, 6, 8)
let BoxB = Box(10, 12, 14)
let x = LengthFirst.Compare(BoxA, BoxB)
printfn $"\n{x}"
' This explicit interface implementation
' compares first by the length.
' Returns -1 because the length of BoxA
' is less than the length of BoxB.
Dim LengthFirst As New BoxLengthFirst()
Dim bc As Comparer(Of Box) = CType(LengthFirst, Comparer(Of Box))
Dim BoxA As New Box(2, 6, 8)
Dim BoxB As New Box(10, 12, 14)
Dim x As Integer = LengthFirst.Compare(BoxA, BoxB)
Console.WriteLine()
Console.WriteLine(x.ToString())
Комментарии
Этот метод является оболочкой для Compare(T, T) метода, поэтому obj его необходимо привести к типу, указанному универсальным аргументом T текущего экземпляра. Если его нельзя привести T, ArgumentException создается исключение.
null Сравнение с любым ссылочным типом разрешено и не создает исключение. При сортировке null считается меньше, чем любой другой объект.
Примечания для тех, кто вызывает этот метод
Compare(T, T) и Equals(T, T) ведет себя по-разному с точки зрения конфиденциальности языка и регистра.
Для сравнения StringComparer строк рекомендуется использовать Comparer<String>класс.
StringComparer Свойства класса возвращают предопределенные экземпляры, которые выполняют сравнение строк с различными сочетаниями конфиденциальности языка и регистра. Конфиденциальность регистра и конфиденциальность языка и региональных параметров согласованы между членами одного StringComparer экземпляра.
Дополнительные сведения о сравнениях, относящихся к языку и региональным параметрам, см. в System.Globalization пространстве имен и глобализации и локализации.