Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Interfaccia IComparable<T>

Definisce un metodo di confronto generalizzato che viene implementato da un tipo di valore o da una classe per creare un metodo di confronto specifico del tipo per l'ordinamento delle istanze.

Spazio dei nomi:  System
Assembly:  mscorlib (in mscorlib.dll)

public interface IComparable<in T>

Parametri di tipo

in T

Tipo di oggetti da confrontare.

Il parametro di questo tipo è controvariante. Ciò significa che è possibile utilizzare il tipo specificato o qualsiasi tipo meno derivato. Per ulteriori informazioni sulla covarianza e la controvarianza, vedere Covarianza e controvarianza nei generics.

Il tipo IComparable<T> espone i seguenti membri.

  NomeDescrizione
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreCompareToConfronta l'oggetto corrente con un altro oggetto dello stesso tipo.
In alto

Questa interfaccia è implementata dai tipi i cui valori possono essere ordinati, principalmente per fini di ordinamento. Ad esempio, un numero può essere maggiore di un secondo numero, e una stringa può essere visualizzata in ordine alfabetico prima di una altra. Un tipo di valore o una classe implementano il metodo CompareTo(T) per creare un metodo di confronto specifico del tipo adatto per l'esecuzione di operazioni come l'ordinamento.

L'interfaccia IComparable<T> definisce il metodo CompareTo(T) che consente di determinare l'ordinamento delle istanze del tipo utilizzato nell'implementazione. L'interfaccia IEquatable<T> definisce il metodo Equals che consente di determinare l'uguaglianza fra istanze del tipo utilizzato nell'implementazione.

L'implementazione del metodo CompareTo(T) deve restituire un Int32 che dispone di uno dei tre valori, come illustrato nella tabella seguente.

Valore

Significato

Minore di zero

Questo oggetto è minore dell'oggetto specificato dal metodo CompareTo.

Zero

Questo oggetto è uguale al parametro del metodo.

Maggiore di zero

Questo oggetto è maggiore del parametro del metodo.

L'interfaccia IComparable<T> fornisce un metodo di confronto fortemente tipizzato per ordinare i membri di un oggetto insieme generico. Pertanto, non è in genere destinata a essere chiamata direttamente dal codice dello sviluppatore. Viene invece chiamata automaticamente da metodi quali List<T>.Sort() e Add.

Note per gli implementatori

Sostituire il parametro relativo al tipo dell'interfaccia IComparable<T> con il tipo che implementa l'interfaccia corrente.

Se si implementa IComparable<T>, si dovrebbe eseguire l'overload degli operatori op_GreaterThan, op_GreaterThanOrEqual, op_LessThan e op_LessThanOrEqual per restituire valori coerenti con CompareTo. Inoltre, si dovrebbe implementare anche IEquatable<T>. Per informazioni complete vedere l'articolo IEquatable<T>.

Nell'esempio di codice riportato di seguito viene illustrata l'implementazione di IComparable<T> per un semplice oggetto Temperature. In particolare, viene mostrato come creare un insieme di stringhe SortedList<TKey, TValue> in cui gli oggetti Temperature sono utilizzati come chiavi e come aggiungere all'elenco diverse coppie di temperature e stringhe fuori sequenza. Nella chiamata al metodo Add, l'insieme SortedList<TKey, TValue> utilizza l'implementazione dell'interfaccia IComparable<T> per ordinare le voci dell'elenco, che vengono quindi visualizzate in ordine di temperatura crescente.


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

Supportato in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Libreria di classi portabile

Supportato in: Libreria di classi portabile

.NET per applicazioni Windows Store

Supportato in: Windows 8

.NET per applicazioni Windows Phone

Supportato 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 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft