Leggi in inglese

Condividi tramite


IComparable Interfaccia

Definizione

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

C#
public interface IComparable
C#
[System.Runtime.InteropServices.ComVisible(true)]
public interface IComparable
Derivato
Attributi

Esempio

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

C#
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

Commenti

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

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

Valore Significato
Minore di zero L'istanza corrente precede l'oggetto specificato dal CompareTo metodo nell'ordinamento.
Zero Questa istanza corrente si verifica nella stessa posizione nell'ordine di ordinamento dell'oggetto specificato dal CompareTo metodo .
Maggiore di zero Questa istanza corrente segue l'oggetto specificato dal CompareTo metodo nell'ordinamento.

Tutti i tipi numerici (ad esempio Int32 e ) implementano IComparable, come StringChar, e DateTimeDouble. I tipi personalizzati devono inoltre fornire la propria implementazione di per consentire l'ordinamento o l'ordinamento delle istanze di IComparable oggetti.

Metodi

CompareTo(Object)

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

Si applica a

Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0