Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Interfaccia IComparable

 

Definisce un metodo di confronto specifico del tipo generalizzato che viene implementato da una classe o da un tipo di valore per ordinare le relative istanze.

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

[ComVisibleAttribute(true)]
public interface IComparable

NomeDescrizione
System_CAPS_pubmethodCompareTo(Object)

Confronta l'istanza corrente con un altro oggetto dello stesso tipo e restituisce un numero intero che indica se l'istanza corrente precede, segue, oppure si trova nella stessa posizione nell'ordinamento rispetto all'altro oggetto.

Questa interfaccia viene implementata da tipi i cui valori possono essere ordinati.Richiede che i suddetti tipi definiscano un unico metodo, CompareTo(Object), il quale indica se la posizione dell'istanza corrente nell'ordinamento è precedente, successiva o uguale a quella di un secondo oggetto dello stesso tipo.L'implementazione di IComparable dell'istanza viene chiamata automaticamente da metodi quali Array.Sort e ArrayList.Sort.

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

Valore

Significato

Minore di zero

L'istanza corrente precede l'oggetto specificato dal metodo CompareTo nell'ordinamento.

Zero

L'istanza corrente è nella stessa posizione dell'oggetto specificato dal metodo CompareTo nell'ordinamento.

Maggiore di zero

L'istanza corrente segue l'oggetto specificato dal metodo CompareTo nell'ordinamento.

Tutti i tipi numerici (quali ad esempio Int32 e Double) implementano IComparable, allo stesso modo di String, Char e DateTime.I tipi personalizzati devono inoltre fornire la propria implementazione di IComparable per consentire l'ordinamento delle istanze di oggetti.

Nell'esempio seguente viene illustrata l'implementazione di IComparable e viene descritto il metodo CompareTo richiesto.

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
Disponibile da 4.5
.NET Framework
Disponibile da 1.1
Portable Class Library
Supportato in: portable .NET platforms
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: