Lire en anglais

Partager via


IComparable<T> Interface

Définition

Définit une méthode de comparaison généralisée qu’un type valeur ou une classe implémente pour créer une méthode de comparaison propre au type et permettant d’ordonnancer ou de trier ses instances.

public interface IComparable<in T>
public interface IComparable<T>

Paramètres de type

T

Type de l'objet à comparer.

Ce paramètre de type est contravariant. Cela signifie que vous pouvez utiliser le type spécifié ou tout type moins dérivé. Pour plus d’informations sur la covariance et la contravariance, consultez Covariance et contravariance dans les génériques.
Dérivé

Exemples

L’exemple suivant illustre l’implémentation d’un IComparable<T> objet simple Temperature . L’exemple crée une SortedList<TKey,TValue> collection de chaînes avec Temperature des clés d’objet et ajoute plusieurs paires de températures et de chaînes à la liste hors séquence. Dans l’appel à la Add méthode, la SortedList<TKey,TValue> collection utilise l’implémentation IComparable<T> pour trier les entrées de liste, qui sont ensuite affichées dans l’ordre d’augmentation de la température.

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);
    }

    // Define the is greater than operator.
    public static bool operator >  (Temperature operand1, Temperature operand2)
    {
       return operand1.CompareTo(operand2) > 0;
    }

    // Define the is less than operator.
    public static bool operator <  (Temperature operand1, Temperature operand2)
    {
       return operand1.CompareTo(operand2) < 0;
    }

    // Define the is greater than or equal to operator.
    public static bool operator >=  (Temperature operand1, Temperature operand2)
    {
       return operand1.CompareTo(operand2) >= 0;
    }

    // Define the is less than or equal to operator.
    public static bool operator <=  (Temperature operand1, Temperature operand2)
    {
       return operand1.CompareTo(operand2) <= 0;
    }

    // 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.
*/

Remarques

Cette interface est implémentée par des types dont les valeurs peuvent être triées ou triées et fournit une méthode de comparaison fortement typée pour classer les membres d’un objet de collection générique. Par exemple, un nombre peut être supérieur à un deuxième nombre, et une chaîne peut apparaître par ordre alphabétique avant une autre. Il exige que les types d’implémentation définissent une méthode unique, CompareTo(T)qui indique si la position de l’instance actuelle dans l’ordre de tri est antérieure, après, ou identique à un deuxième objet du même type. En règle générale, la méthode n’est pas appelée directement à partir du code du développeur. Au lieu de cela, elle est appelée automatiquement par des méthodes telles que List<T>.Sort() et Add.

En règle générale, les types qui fournissent une IComparable<T> implémentation implémentent également l’interface IEquatable<T> . L’interface IEquatable<T> définit la Equals méthode, qui détermine l’égalité des instances du type d’implémentation.

L’implémentation de la CompareTo(T) méthode doit retourner une Int32 valeur de trois valeurs, comme indiqué dans le tableau suivant.

Value Signification
Inférieure à zéro Cet objet précède l’objet spécifié par la méthode dans l’ordre CompareTo de tri.
Zéro Cette instance actuelle se produit à la même position dans l’ordre de tri que l’objet spécifié par l’argument de CompareTo méthode.
Supérieure à zéro Cette instance actuelle suit l’objet spécifié par l’argument de CompareTo méthode dans l’ordre de tri.

Tous les types numériques (tels que Int32 et Double) implémentent IComparable<T>, comme c’est le cas String, Charet DateTime. Les types personnalisés doivent également fournir leur propre implémentation pour permettre à des instances d’objet IComparable<T> d’être triées ou triées.

Notes pour les responsables de l’implémentation

Remplacez le paramètre de type de l’interface IComparable<T> par le type qui implémente cette interface.

Si vous implémentez , vous devez surcharger IComparable<T>les op_GreaterThanop_LessThanop_GreaterThanOrEqualopérateurs , et op_LessThanOrEqual les opérateurs pour retourner des valeurs cohérentes avec .CompareTo(T) En outre, vous devez également implémenter IEquatable<T>. Pour plus d’informations, consultez l’article IEquatable<T> .

Méthodes

CompareTo(T)

Compare l'instance actuelle avec un autre objet du même type et retourne un entier qui indique si l'instance actuelle précède ou suit un autre objet ou se trouve à la même position dans l'ordre de tri.

S’applique à

Voir aussi