Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


IComparable Interfejs

Definicja

Definiuje uogólniona metoda porównania specyficzna dla typu, która implementuje typ wartości lub klasę w celu porządkowowania lub sortowania wystąpień.

C#
public interface IComparable
C#
[System.Runtime.InteropServices.ComVisible(true)]
public interface IComparable
Pochodne
Atrybuty

Przykłady

Poniższy przykład ilustruje implementację IComparable metody i wymaganą CompareTo metodę.

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

Uwagi

Ten interfejs jest implementowany przez typy, których wartości można porządkować lub sortować. Wymaga to, aby zaimplementowanie typów zdefiniowało pojedynczą metodę , CompareTo(Object)która wskazuje, czy pozycja bieżącego wystąpienia w kolejności sortowania jest wcześniej, po, czy taka sama jak drugi obiekt tego samego typu. Implementacja wystąpienia jest wywoływana IComparable automatycznie przez metody, takie jak Array.Sort i ArrayList.Sort.

Implementacja CompareTo(Object) metody musi zwrócić Int32 jedną z trzech wartości, jak pokazano w poniższej tabeli.

Wartość Znaczenie
Mniej niż zero Bieżące wystąpienie poprzedza obiekt określony przez metodę CompareTo w kolejności sortowania.
Zero To bieżące wystąpienie występuje w tej samej pozycji w kolejności sortowania, co obiekt określony przez metodę CompareTo .
Większe od zera To bieżące wystąpienie jest zgodne z obiektem określonym przez metodę CompareTo w kolejności sortowania.

Wszystkie typy liczbowe (takie jak Int32 i Double) implementują IComparable, jak do String, Chari DateTime. Typy niestandardowe powinny również zapewniać własną implementację, IComparable aby umożliwić porządkowenie lub sortowanie wystąpień obiektów.

Metody

CompareTo(Object)

Porównuje bieżące wystąpienie z innym obiektem tego samego typu i zwraca liczbę całkowitą, która wskazuje, czy bieżące wystąpienie poprzedza, następuje po lub występuje w tym samym położeniu, co inny obiekt w porządku sortowania.

Dotyczy

Produkt Wersje
.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, 8, 9, 10
.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, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0