Tuple<T1>.IStructuralComparable.CompareTo(Object, IComparer) 方法

定义

使用指定的比较器将当前的 Tuple<T1> 对象与指定对象进行比较,并返回一个整数,该整数指示当前对象在排序顺序中的位置是在指定对象之前、之后还是与其相同。

C#
int IStructuralComparable.CompareTo (object other, System.Collections.IComparer comparer);

参数

other
Object

要与当前实例进行比较的对象。

comparer
IComparer

提供用于比较的自定义规则的对象。

返回

Int32

一个带符号整数,指示此实例和 other 在排序顺序中的相对位置,如下表所示。

说明
负整数 此实例位于 other 之前。
此实例在排序顺序中的位置与 other 相同。
正整数 此实例位于 other 之后。

实现

例外

other 不是 Tuple<T1> 对象。

示例

以下示例定义一 DescendingComparer 个名为实现接口的 IComparer<T> 泛型类。 DescendingComparer 通过反转特定类型的默认比较器返回的值,以降序而不是升序对对象进行排序。 然后,泛型 DescendingComparer 类的实例传递给 Array.Sort(Array, IComparer) 方法,以按降序对对象数组 Tuple<T1> 进行排序。 请注意,该示例不直接调用 IStructuralComparable.CompareTo 该方法。 此方法由 Array.Sort(Array, IComparer) 数组中每个元素的方法隐式调用。

C#
using System;
using System.Collections.Generic;

public class DescendingComparer<T> : IComparer<T>
{
    public int Compare(T x, T y) 
    {
        return -1 * Comparer<T>.Default.Compare(x, y);
    }
}

class CompareTo2
{
   static void Main()
   {
       Tuple<Double>[] values = { Tuple.Create(13.54),
                                  Tuple.Create(Double.NaN),
                                  Tuple.Create(-189.42993),
                                  Tuple.Create(Double.PositiveInfinity),
                                  Tuple.Create(Double.Epsilon),
                                  Tuple.Create(1.934E-17),
                                  Tuple.Create(Double.NegativeInfinity),
                                  Tuple.Create(-0.000000000003588),
                                  null };
       Console.WriteLine("The values in unsorted order:");
       foreach (var value in values)
           if (value != null)
               Console.WriteLine("   {0}", value.Item1);
           else
               Console.WriteLine("   <null>");
       Console.WriteLine();

       Array.Sort(values, new DescendingComparer<Tuple<Double>>());

       Console.WriteLine("The values sorted in descending order:");
       foreach (var value in values)
           if (value != null)
               Console.WriteLine("   {0}", value.Item1);
           else
               Console.WriteLine("   <null>");
    }
}
// The example displays the following output:
//      The values in unsorted order:
//         13.54
//         NaN
//         -189.42993
//         Infinity
//         4.94065645841247E-324
//         1.934E-17
//         -Infinity
//         -3.588E-12
//
//      The values sorted in descending order:
//         Infinity
//         13.54
//         1.934E-17
//         4.94065645841247E-324
//         -3.588E-12
//         -189.42993
//         -Infinity
//         NaN

注解

尽管可以直接调用此方法,但通常通过集合排序方法调用该方法,这些方法包括 IComparer 参数来对集合的成员进行排序。 例如,该方法和Array.Sort(Array, IComparer)Add通过使用SortedList.SortedList(IComparer)构造函数实例化的对象的方法SortedList调用。

注意

该方法 IStructuralComparable.CompareTo 用于排序操作。 当比较的主要用途是确定两个对象是否相等时,不应使用它。 若要确定两个对象是否相等,请调用 IStructuralEquatable.Equals 该方法。

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

另请参阅