Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

IComparable<T> interface

 

Date de publication : novembre 2016

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 spécifique au type et permettant d'ordonnancer ou de trier ses instances.

Espace de noms:   System
Assembly:  mscorlib (dans mscorlib.dll)

public interface IComparable<in T>

Paramètres de type

inT

Le type d’objet à comparer.

NomDescription
System_CAPS_pubmethodCompareTo(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.

Cette interface est implémentée par les types dont les valeurs peuvent être ordonné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 dans l’ordre alphabétique avant un autre. Types de l’implémentation définissent une méthode unique, CompareTo(T), qui indique si la position de l’instance actuelle dans l’ordre de tri : avant, après ou le même qu’un deuxième objet du même type. En règle générale, la méthode n’est pas appelée directement à partir de code du développeur. Au lieu de cela, elle est appelée automatiquement par les méthodes telles que List<T>.Sort() et Add.

En général, les types qui fournissent un IComparable<T> implémentation également implémenter le IEquatable<T> interface. Le IEquatable<T> interface définit les 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 un Int32 qui a l’une des trois valeurs, comme indiqué dans le tableau suivant.

Valeur

Signification

Inférieure à zéro

Cet objet précède l’objet spécifié par le CompareTo méthode dans l’ordre de tri.

Zéro

Cette instance actuelle se produit dans la même position dans l’ordre de tri que l’objet spécifié par le CompareTo argument de la méthode.

Supérieure à zéro

Cette instance actuelle suit l’objet spécifié par le CompareTo argument de la méthode dans l’ordre de tri.

Tous les types numériques (tels que Int32 et Double) implémenter IComparable<T>, de même que String, Char, et DateTime. Types personnalisés doivent également fournir leur propre implémentation de IComparable<T> pour permettre aux instances d’objet d’être ordonnées ou triées.

Remarques à l’attention des implémenteurs :

Remplacez le paramètre de type de la IComparable<T> interface avec le type qui implémente cette interface.

Si vous implémentez IComparable<T>, vous devez surcharger la op_GreaterThan, op_GreaterThanOrEqual, op_LessThan, et op_LessThanOrEqual pour retourner des valeurs qui sont cohérents avec les opérateurs CompareTo. En outre, vous devez également implémenter IEquatable<T>. Consultez le IEquatable<T> article pour plus d’informations.

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

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

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

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

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 2.0
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher: