(0) exportieren Drucken
Alle 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<T>-Schnittstelle

Definiert eine allgemeine Vergleichsmethode, die von einem Werttyp oder einer Klasse für die Erstellung einer typspezifischen Vergleichsmethode zum Sortieren von Instanzen implementiert wird.

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

public interface IComparable<in T>

Typparameter

in T

Der Typ der zu vergleichenden Objekte.

Dieser Typparameter ist Contravariant. Das heißt, Sie können entweder den angegebenen Typ oder einen weniger abgeleiteten Typ verwenden. Weitere Informationen zu Ko- und Kontravarianz finden Sie unter Kovarianz und Kontravarianz in Generika.

Der IComparable<T>-Typ macht die folgenden Member verfügbar.

  NameBeschreibung
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsCompareToVergleicht das aktuelle Objekt mit einem anderen Objekt desselben Typs.
Zum Seitenanfang

Diese Schnittstelle wird von Typen, deren Werte sortiert werden können, hauptsächlich zum Sortieren implementiert. Beispielsweise kann eine Zahl größer als eine zweite Zahl sein, und eine Zeichenfolge kann vor anderen in alphabetischer Reihenfolge angezeigt werden. Eine Werttyp oder eine Klasse implementiert die CompareTo(T)-Methode zur Erstellung einer typspezifischen Vergleichsmethode, die sich beispielsweise zum Sortieren o. ä. eignet.

Die IComparable<T>-Schnittstelle definiert die CompareTo(T)-Methode, die die Sortierreihenfolge von Instanzen des implementierenden Typs bestimmt. Die IEquatable<T>-Schnittstelle definiert die Equals-Methode, die die Gleichheit von Instanzen des implementierenden Typs bestimmt.

Die Implementierung der CompareTo(T)-Methode muss ein Int32 zurückgeben, das einen von drei Werten hat, wie in der folgenden Tabelle gezeigt.

Wert

Bedeutung

Kleiner als 0

Dieses Objekt ist kleiner als das von der CompareTo-Methode angegebene Objekt.

Zero

Dieses Objekt ist gleich dem Methodenparameter.

Größer als 0 (null)

Dieses Objekt ist größer als der Methodenparameter.

Die IComparable<T>-Schnittstelle stellt eine stark typisierte Vergleichsmethode zum Sortieren von Membern eines generischen Auflistungsobjekts bereit. Aus diesem Grund wird sie normalerweise nicht direkt aus Entwicklercode aufgerufen. Stattdessen wird sie automatisch beispielsweise von der List<T>.Sort()-Methode und der Add-Methode aufgerufen.

Hinweise zur Implementierung

Ersetzen Sie den Typparameter der IComparable<T>-Schnittstelle mit dem Typ, der diese Schnittstelle implementiert.

Wenn Sie IComparable<T> implementieren, sollten Sie op_GreaterThan, op_GreaterThanOrEqual, op_LessThan und op_LessThanOrEqual zu überladen Operatoren den Rückgabewerten, die mit CompareTo konsistent sind. Außerdem sollten Sie außerdem IEquatable<T> implementieren. Siehe den IEquatable<T> Artikel für vollständige Informationen.

Das folgende Codebeispiel veranschaulicht die Implementierung von IComparable<T> für ein einfaches Temperature-Objekt. Im Beispiel wird eine SortedList<TKey, TValue>-Auflistung von Zeichenfolgen mit Temperature-Objektschlüsseln erstellt, und es werden der Liste mehrere Paare aus Temperaturen und Zeichenfolgen in ungeordneter Reihenfolge hinzugefügt. Beim Aufruf der Add-Methode verwendet die SortedList<TKey, TValue>-Auflistung die IComparable<T>-Implementierung zum Sortieren der Listeneinträge, die dann in aufsteigender Reihenfolge nach Temperatur angezeigt werden.


using System;
using System.Collections.Generic;

public class Temperature : IComparable<Temperature>
{
    // Implement the generic CompareTo method with the Temperature 
    // class as the Type parameter. 
    //
    public int CompareTo(Temperature other)
    {
        // If other is not a valid object reference, this instance is greater.
        if (other == null) return 1;

        // The temperature comparison depends on the comparison of 
        // the underlying Double values. 
        return m_value.CompareTo(other.m_value);
    }

    // The underlying temperature value.
    protected double m_value = 0.0;

    public double Celsius    
    {
        get
        {
            return m_value - 273.15;
        }
    }

    public double Kelvin    
    {
        get
        {
            return m_value;
        }
        set
        {
            if (value < 0.0)
            {
                throw new ArgumentException("Temperature cannot be less than absolute zero.");
            }
            else
            {
                m_value = value;
            }
        }
    }

    public Temperature(double kelvins)
    {
        this.Kelvin = kelvins;
    }
}

public class Example
{
    public static void Main()
    {
        SortedList<Temperature, string> temps = 
            new SortedList<Temperature, string>();

        // Add entries to the sorted list, out of order.
        temps.Add(new Temperature(2017.15), "Boiling point of Lead");
        temps.Add(new Temperature(0), "Absolute zero");
        temps.Add(new Temperature(273.15), "Freezing point of water");
        temps.Add(new Temperature(5100.15), "Boiling point of Carbon");
        temps.Add(new Temperature(373.15), "Boiling point of water");
        temps.Add(new Temperature(600.65), "Melting point of Lead");

        foreach( KeyValuePair<Temperature, string> kvp in temps )
        {
            Console.WriteLine("{0} is {1} degrees Celsius.", kvp.Value, kvp.Key.Celsius);
        }
    }
}
/* This example displays the following output:
      Absolute zero is -273.15 degrees Celsius.
      Freezing point of water is 0 degrees Celsius.
      Boiling point of water is 100 degrees Celsius.
      Melting point of Lead is 327.5 degrees Celsius.
      Boiling point of Lead is 1744 degrees Celsius.
      Boiling point of Carbon is 4827 degrees Celsius.
*/


.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft