CompareTo Methode (Object)
Inhaltsverzeichnis reduzieren
Inhaltsverzeichnis erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

IComparable.CompareTo-Methode (Object)

 

Vergleicht die aktuelle Instanz mit einem anderen Objekt vom selben Typ und gibt eine ganze Zahl zurück, die angibt, ob die aktuelle Instanz in der Sortierreihenfolge vor oder nach dem anderen Objekt oder an derselben Position auftritt.

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

int CompareTo(
	object obj
)

Parameter

obj

Ein Objekt, das mit dieser Instanz verglichen werden soll.

Rückgabewert

Type: System.Int32

Ein Wert, der die relative Reihenfolge der verglichenen Objekte angibt.Der Rückgabewert hat folgende Bedeutung:

Wert

Bedeutung

Kleiner als 0

Diese Instanz befindet sich in der Sortierreihenfolge vor obj.

Zero

Diese Instanz tritt in der Sortierreihenfolge an der gleichen Position wie obj auf.

Größer als 0 (null)

Diese Instanz folgt in der Sortierreihenfolge auf obj.

Exception Condition
ArgumentException

obj hat nicht denselben Typ wie diese Instanz.

Die CompareTo-Methode wird von Typen implementiert, deren Werte angeordnet oder sortiert werden können.Sie wird automatisch von Methoden nicht generischer Auflistungsobjekte (z. B. Array.Sort) aufgerufen, um die einzelnen Member des Arrays anzuordnen.Wenn IComparable von einer benutzerdefinierten Klasse oder Struktur nicht implementiert wird, können die enthaltenen Member nicht angeordnet werden, und der Sortiervorgang löst möglicherweise eine InvalidOperationException aus.

Diese Methode ist nur eine Definition und muss für die Anwendung von einer bestimmten Klasse oder einem Werttyp implementiert werden.Die Bedeutung der Vergleiche, die im Abschnitt "Rückgabewert" ("geht voraus", "tritt an der gleichen Position auf wie" und "folgt") angegeben wurden, hängt von der bestimmten Implementierung ab.

Per Definition ist jedes Objekt größer als null (oder folgt), und zwei NULL-Verweise gelten als gleich.

Der Parameter obj muss denselben Typ wie die Klasse oder der Werttyp haben, der diese Schnittstelle implementiert. Andernfalls wird eine ArgumentException ausgelöst.

Hinweise zur Implementierung:

Für Objekte A, B und C muss Folgendes gelten:

A.CompareTo(A) muss 0 (null) zurückgeben.

Wenn A.CompareTo(B) 0 (null) zurückgibt, dann muss B.CompareTo(A) 0 (null) zurückgeben.

Wenn A.CompareTo(B) 0 (null) und B.CompareTo(C) 0 (null) zurückgibt, dann muss A.CompareTo(C) 0 (null) zurückgeben.

Wenn A.CompareTo(B) einen von 0 verschiedenen Wert zurückgibt, muss B.CompareTo(A) einen Wert mit entgegengesetztem Vorzeichen zurückgeben.

Wenn A.CompareTo(B) einen von 0 verschiedenen Wert x zurückgibt und B.CompareTo(C) einen Wert y zurückgibt, der dasselbe Vorzeichen wie x hat, muss A.CompareTo(C) einen Wert zurückgeben, der dasselbe Vorzeichen wie x und y hat.

Hinweise zu Aufrufern:

Verwenden Sie die CompareTo-Methode, um die Reihenfolge von Instanzen einer Klasse zu bestimmen.

Im folgenden Beispiel wird veranschaulicht, wie mit CompareTo ein Temperature-Objekt, das IComparable implementiert, mit einem anderen Objekt verglichen wird.Das Temperature-Objekt implementiert CompareTo, indem es einfach einen Aufruf der Int32.CompareTo-Methode umschließt.

using System;
using System.Collections;

public class Temperature : IComparable 
{
    // The temperature value
    protected double temperatureF;

    public int CompareTo(object obj) {
        if (obj == null) return 1;

        Temperature otherTemperature = obj as Temperature;
        if (otherTemperature != null) 
            return this.temperatureF.CompareTo(otherTemperature.temperatureF);
        else
           throw new ArgumentException("Object is not a Temperature");
    }

    public double Fahrenheit 
    {
        get 
        {
            return this.temperatureF;
        }
        set {
            this.temperatureF = value;
        }
    }

    public double Celsius 
    {
        get 
        {
            return (this.temperatureF - 32) * (5.0/9);
        }
        set 
        {
            this.temperatureF = (value * 9.0/5) + 32;
        }
    }
}

public class CompareTemperatures
{
   public static void Main()
   {
      ArrayList temperatures = new ArrayList();
      // Initialize random number generator.
      Random rnd = new Random();

      // Generate 10 temperatures between 0 and 100 randomly.
      for (int ctr = 1; ctr <= 10; ctr++)
      {
         int degrees = rnd.Next(0, 100);
         Temperature temp = new Temperature();
         temp.Fahrenheit = degrees;
         temperatures.Add(temp);   
      }

      // Sort ArrayList.
      temperatures.Sort();

      foreach (Temperature temp in temperatures)
         Console.WriteLine(temp.Fahrenheit);

   }
}
// The example displays the following output to the console (individual
// values may vary because they are randomly generated):
//       2
//       7
//       16
//       17
//       31
//       37
//       58
//       66
//       72
//       95

Universal Windows Platform
Verfügbar seit 4.5
.NET Framework
Verfügbar seit 1.1
Portable Class Library
Unterstützt in: portable .NET platforms
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen:
© 2016 Microsoft