Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Tuple<T1, T2, T3, T4, T5, T6>.IStructuralComparable.CompareTo-Methode: (Object, IComparer)

.NET Framework (current version)
 

Veröffentlicht: Oktober 2016

Vergleicht das aktuelle Tuple<T1, T2, T3, T4, T5, T6> Objekt mit einem angegebenen Objekt mithilfe eines angegebenen Vergleichs und gibt eine ganze Zahl, die angibt, ob das aktuelle Objekt vor, nach oder an derselben Position wie das angegebene Objekt in der Sortierreihenfolge ist.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

int IStructuralComparable.CompareTo(
	object other,
	IComparer comparer
)

Parameter

other
Type: System.Object

Ein Objekt, das mit der aktuellen Instanz verglichen werden soll.

comparer
Type: System.Collections.IComparer

Ein Objekt, das benutzerdefinierte Regeln für Vergleiche bereitstellt.

Rückgabewert

Type: System.Int32

Eine Ganzzahl mit Vorzeichen, die relative Position dieser Instanz und other in der Sortierreihenfolge an, wie in der folgenden Tabelle dargestellt.

Wert

Beschreibung

Eine negative ganze Zahl

Diese Instanz geht other voran.

0

Diese Instanz und other haben in der Sortierreihenfolge dieselbe Position.

Eine positive ganze Zahl

Diese Instanz folgt other.

Exception Condition
ArgumentException

Bei diesem Member handelt es sich um eine explizite Schnittstellenmember-Implementierung. Er kann nur verwendet werden, wenn die Tuple<T1, T2, T3, T4, T5, T6>-Instanz in eine IStructuralComparable-Schnittstelle umgewandelt wird.

Mit dieser Methode können Sie benutzerdefinierte Vergleiche von definieren Tuple<T1, T2, T3, T4, T5, T6> Objekte. Beispielsweise können Sie diese Methode, um die Reihenfolge Tuple<T1, T2, T3, T4, T5, T6> Objekte basierend auf dem Wert einer bestimmten Komponente.

Obwohl diese Methode direkt aufgerufen werden kann, die am häufigsten heißt es Sammlung sortieren-Methoden mit IComparer Parameter, um die Mitglieder einer Sammlung zu bestellen. Angenommen, sie wird von aufgerufen die Array.Sort(Array, IComparer) Methode und die Add Methode eine SortedList -Objekt, das mit instanziiert wird die SortedList.SortedList(IComparer) Konstruktor.

System_CAPS_cautionAchtung

Die IStructuralComparable.CompareTo Methode ist für die Verwendung in Sortiervorgängen vorgesehen. Sie sollte nicht verwendet werden, wenn der primäre Zweck eines Vergleichs ist, um zu bestimmen, ob zwei Objekte gleich sind. Bestimmt, ob zwei Objekte gleich sind, rufen Sie die IStructuralEquatable.Equals(Object, IEqualityComparer) Methode.

Das folgende Beispiel erstellt ein Array von Tuple<T1, T2, T3, T4, T5, T6> -Objekten, die Bevölkerungsdaten für drei amerikanische Orte von 1960 auf 2000 enthält. Das Sextupel erste Komponente ist der Ortsname. Die verbleibenden fünf Komponenten stellen die Bevölkerung bei 10-Jahres-Intervallen von 1960 auf 2000.

Die PopulationComparer -Klasse stellt eine IComparer Implementierung, mit das Array von Sextupeln mit einer seiner Komponenten sortiert werden können. Zwei Werte werden bereitgestellt, um die PopulationComparer Klasse in seinem Konstruktor: die Position der Komponente, die die Sortierreihenfolge festlegt und ein Boolean -Wert, der angibt, ob die Tupelobjekte in aufsteigender oder absteigender Reihenfolge sortiert werden sollen.

Im Beispiel werden anschließend die Elemente im Array in unsortierter Reihenfolge angezeigt, nach der dritten Komponente (die Bevölkerung in 1970) sortiert und angezeigt, und klicken Sie dann nach der sechsten Komponente (die Bevölkerung in 2000) sortiert und angezeigt.

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

public class PopulationComparer<T1, T2, T3, T4, T5, T6> : IComparer
{
   private int itemPosition;
   private int multiplier = -1;

   public PopulationComparer(int component) : this(component, true)
   { }

   public PopulationComparer(int component, bool descending)
   {
      if (! descending) multiplier = 1;

      if (component <= 0 || component > 6)
         throw new ArgumentException("The component argument is out of range.");

      itemPosition = component;
   }

   public int Compare(object x, object y)
   {
      var tX = x as Tuple<T1, T2, T3, T4, T5, T6>;
      if (tX == null)
      {
         return 0;
      }
      else
      {
         var tY = y as Tuple<T1, T2, T3, T4, T5, T6>;
         switch (itemPosition)
         {
            case 1:
               return Comparer<T1>.Default.Compare(tX.Item1, tY.Item1) * multiplier;
            case 2:
               return Comparer<T2>.Default.Compare(tX.Item2, tY.Item2) * multiplier;
            case 3:
               return Comparer<T3>.Default.Compare(tX.Item3, tY.Item3) * multiplier;
            case 4:
               return Comparer<T4>.Default.Compare(tX.Item4, tY.Item4) * multiplier;
            case 5:
               return Comparer<T5>.Default.Compare(tX.Item5, tY.Item5) * multiplier;
            case 6:
               return Comparer<T6>.Default.Compare(tX.Item6, tY.Item6) * multiplier;
            default:
               return Comparer<T1>.Default.Compare(tX.Item1, tY.Item1) * multiplier;
         }
      }
   }
}

public class Example
{
   public static void Main()
   {
      // Create array of sextuple with population data for three U.S.
      // cities, 1960-2000.
      Tuple<string, int, int, int, int, int>[] cities =
           { Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Chicago", 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display array in unsorted order.
      Console.WriteLine("In unsorted order:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
      Console.WriteLine();

      Array.Sort(cities, new PopulationComparer<string, int, int, int, int, int>(3));

      // Display array in sorted order.
      Console.WriteLine("Sorted by population in 1970:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
      Console.WriteLine();

      Array.Sort(cities, new PopulationComparer<string, int, int, int, int, int>(6));

      // Display array in sorted order.
      Console.WriteLine("Sorted by population in 2000:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
   }
}
// The example displays the following output:
//    In unsorted order:
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
//    
//    Sorted by population in 1970:
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//    
//    Sorted by population in 2000:
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 4.0
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 4.0
Windows Phone Silverlight
Verfügbar seit 8.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: