英語で読む

次の方法で共有


IComparable インターフェイス

定義

値型またはクラスで実装する、インスタンスの並べ替えを目的とする型固有の汎用比較メソッドを定義します。

public interface IComparable
[System.Runtime.InteropServices.ComVisible(true)]
public interface IComparable
派生
属性

次の例は、 および 必須CompareToメソッドのIComparable実装を示しています。

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

注釈

このインターフェイスは、値を並べ替えたり並べ替えたりできる型によって実装されます。 型を実装するには、並べ替え順序での現在のインスタンスの位置が、 CompareTo(Object)同じ型の 2 番目のオブジェクトの前、後、または同じかどうかを示す 1 つのメソッド を定義する必要があります。 インスタンスのIComparable実装は、 や ArrayList.SortなどのArray.Sortメソッドによって自動的に呼び出されます。

メソッドの実装では、 CompareTo(Object) 次の表に示すように、3 つの値のいずれかを持つ を返す Int32 必要があります。

[値] 説明
0 より小さい値 現在のインスタンスは、並べ替え順序で メソッドで CompareTo 指定された オブジェクトの前にあります。
ゼロ この現在のインスタンスは、 メソッドで指定されたオブジェクトと同じ並べ替え順序で CompareTo 発生します。
0 より大きい値 この現在のインスタンスは、 メソッドで指定されたオブジェクトの CompareTo 並べ替え順序に従います。

すべての数値型 (や DoubleなどInt32) は、 のように StringChar実装IComparableしますDateTime。 カスタム型は、 の独自の IComparable 実装も提供して、オブジェクト インスタンスの順序付けまたは並べ替えを可能にする必要があります。

メソッド

CompareTo(Object)

現在のインスタンスを同じ型の別のオブジェクトと比較し、現在のインスタンスの並べ替え順序での位置が、比較対象のオブジェクトと比べて前か、後か、または同じかを示す整数を返します。

適用対象

製品 バージョン
.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
.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