# Tuple<T1,T2,T3,T4>.IStructuralComparable.CompareTo(Object, IComparer) 方法

## 定义

`` virtual int System.Collections.IStructuralComparable.CompareTo(System::Object ^ other, System::Collections::IComparer ^ comparer) = System::Collections::IStructuralComparable::CompareTo;``
``int IStructuralComparable.CompareTo (object other, System.Collections.IComparer comparer);``
``````abstract member System.Collections.IStructuralComparable.CompareTo : obj * System.Collections.IComparer -> int
override this.System.Collections.IStructuralComparable.CompareTo : obj * System.Collections.IComparer -> int``````
``Function CompareTo (other As Object, comparer As IComparer) As Integer Implements IStructuralComparable.CompareTo``

other
Object

comparer
IComparer

#### 返回

Int32

Value 说明Description

Zero 此实例在排序顺序中的位置与 `other` 相同。This instance and `other` have the same position in the sort order.

#### 例外

`other` 不是 Tuple<T1,T2,T3,T4> 对象。`other` is not a Tuple<T1,T2,T3,T4> object.

## 示例

``````using System;
using System.Collections;
using System.Collections.Generic;

public class PitcherComparer<T1, T2, T3, T4> : IComparer
{
public int Compare(object x, object y)
{
Tuple<T1, T2, T3, T4> tX = x as Tuple<T1, T2, T3, T4>;
if (tX == null)
{
return 0;
}
else
{
Tuple<T1, T2, T3, T4> tY = y as Tuple<T1, T2, T3, T4>;
return Comparer<T3>.Default.Compare(tX.Item3, tY.Item3);
}
}
}

public class Example
{
public static void Main()
{
Tuple<string, double, double, int>[] pitchers =
{ Tuple.Create("McHale, Joe", 240.1, 3.60, 221),
Tuple.Create("Paul, Dave", 233.1, 3.24, 231),
Tuple.Create("Williams, Mike", 193.2, 4.00, 183),
Tuple.Create("Blair, Jack", 168.1, 3.48, 146),
Tuple.Create("Henry, Walt", 140.1, 1.92, 96),
Tuple.Create("Rohr, Don", 101.0, 3.74, 110) };

Console.WriteLine("The values in unsorted order:");
foreach (var pitcher in pitchers)
Console.WriteLine(pitcher.ToString());

Console.WriteLine();

Array.Sort(pitchers, new PitcherComparer<string, double, double, int>());

Console.WriteLine("The values sorted by earned run average (component 3):");
foreach (var pitcher in pitchers)
Console.WriteLine(pitcher.ToString());
}
}
// The example displays the following output;
//       The values in unsorted order:
//       (McHale, Joe, 240.1, 3.6, 221)
//       (Paul, Dave, 233.1, 3.24, 231)
//       (Williams, Mike, 193.2, 4, 183)
//       (Blair, Jack, 168.1, 3.48, 146)
//       (Henry, Walt, 140.1, 1.92, 96)
//       (Lee, Adam, 137.2, 2.94, 109)
//       (Rohr, Don, 101, 3.74, 110)
//
//       The values sorted by earned run average (component 3):
//       (Henry, Walt, 140.1, 1.92, 96)
//       (Lee, Adam, 137.2, 2.94, 109)
//       (Rohr, Don, 101, 3.74, 110)
//       (Blair, Jack, 168.1, 3.48, 146)
//       (McHale, Joe, 240.1, 3.6, 221)
//       (Paul, Dave, 233.1, 3.24, 231)
//       (Williams, Mike, 193.2, 4, 183)
``````
``````Imports System.Collections
Imports System.Collections.Generic

Public Class PitcherComparer(Of T1, T2, T3, T4) : Implements IComparer
Public Function Compare(x As Object, y As Object) As Integer _
Implements IComparer.Compare
Dim tX As Tuple(Of T1, T2, T3) = TryCast(x, Tuple(Of T1, T2, T3))
If tX Is Nothing Then
Return 0
Else
Dim tY As Tuple(Of T1, T2, T3) = DirectCast(y, Tuple(Of T1, T2, T3))
Return Comparer(Of T3).Default.Compare(tx.Item3, tY.Item3)
End If
End Function
End Class

Module Example
Public Sub Main()
Dim pitchers() =
{ Tuple.Create("McHale, Joe", 240.1, 3.60, 221),
Tuple.Create("Paul, Dave", 233.1, 3.24, 231),
Tuple.Create("Williams, Mike", 193.2, 4.00, 183),
Tuple.Create("Blair, Jack", 168.1, 3.48, 146),
Tuple.Create("Henry, Walt", 140.1, 1.92, 96),
Tuple.Create("Rohr, Don", 101.0, 3.74, 110) }

Console.WriteLine("The values in unsorted order:")
For Each pitcher In pitchers
Console.WriteLine(pitcher.ToString())
Next
Console.WriteLine()

Array.Sort(pitchers, New PitcherComparer(Of String, Double, Double, Integer)())

Console.WriteLine("The values sorted by earned run average (component 3):")
For Each pitcher In pitchers
Console.WriteLine(pitcher.ToString())
Next
End Sub
End Module
' The example displays the following output;
'       The values in unsorted order:
'       (McHale, Joe, 240.1, 3.6, 221)
'       (Paul, Dave, 233.1, 3.24, 231)
'       (Williams, Mike, 193.2, 4, 183)
'       (Blair, Jack, 168.1, 3.48, 146)
'       (Henry, Walt, 140.1, 1.92, 96)
'       (Lee, Adam, 137.2, 2.94, 109)
'       (Rohr, Don, 101, 3.74, 110)
'
'       The values sorted by earned run average (component 3):
'       (Henry, Walt, 140.1, 1.92, 96)
'       (Lee, Adam, 137.2, 2.94, 109)
'       (Rohr, Don, 101, 3.74, 110)
'       (Blair, Jack, 168.1, 3.48, 146)
'       (McHale, Joe, 240.1, 3.6, 221)
'       (Paul, Dave, 233.1, 3.24, 231)
'       (Williams, Mike, 193.2, 4, 183)
``````

## 注解

The IStructuralComparable.CompareTo(Object, IComparer) method is intended for use in sorting operations. 如果比较的主要目的是确定两个对象是否相等，则不应使用此方法。It should not be used when the primary purpose of a comparison is to determine whether two objects are equal. 若要确定两个对象是否相等，请调用 IStructuralEquatable.Equals(Object, IEqualityComparer) 方法。To determine whether two objects are equal, call the IStructuralEquatable.Equals(Object, IEqualityComparer) method.