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

要比较的第二个对象。

返回

一个有符号整数,指示 xy 的相对值,如下表所示。

含义
小于零x 小于 y
x 等于 y
大于零x 大于 y

实现

例外

xy 所属的类型无法被强制转换为类型 T

- 或 -

xy 不实现 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.
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 指定的类型。 如果无法将其强制转换为 TArgumentException 则会引发 。

null允许与任何引用类型进行比较,并且不会生成异常。 排序时, null 被视为小于任何其他对象。

调用方说明

Compare(T, T)Equals(T, T) 的行为在区域性敏感度和区分大小写方面有所不同。

对于字符串比较,StringComparer建议使用 类。Comparer<String> 类的属性 StringComparer 返回预定义实例,这些实例使用区分区域性和区分大小写的不同组合执行字符串比较。 区分大小写和区分区域性在同一 StringComparer 实例的成员之间是一致的。

有关特定于区域性的比较的详细信息,请参阅 System.Globalization 命名空间和 全球化和本地化

适用于

另请参阅