英語で読む

次の方法で共有


IComparable.CompareTo(Object) メソッド

定義

現在のインスタンスを同じ型の別のオブジェクトと比較し、現在のインスタンスが他のオブジェクトと並べ替え順序で同じ位置にあるかどうかを示す整数を返します。

C#
public int CompareTo (object obj);
C#
public int CompareTo (object? obj);

パラメーター

obj
Object

このインスタンスと比較するオブジェクト。

戻り値

比較するオブジェクトの相対順序を示す値。 戻り値には、次の意味があります。

価値 意味
0 未満 このインスタンスは、並べ替え順序で obj の前にあります。
ゼロ このインスタンスは、objと同じ並べ替え順序で発生します。
0 より大きい このインスタンスは、並べ替え順序で obj に従います。

例外

obj は、このインスタンスと同じ型ではありません。

次の例は、CompareTo を使用して、IComparable を実装する Temperature オブジェクトを別のオブジェクトと比較する方法を示しています。 Temperature オブジェクトは、Int32.CompareTo メソッドの呼び出しをラップするだけで、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

注釈

CompareTo メソッドは、値を並べ替えたり並べ替えたりできる型によって実装されます。 配列の各メンバーを並べ替えるために、Array.Sortなどの非ジェネリック コレクション オブジェクトのメソッドによって自動的に呼び出されます。 カスタム クラスまたは構造体が IComparableを実装していない場合、そのメンバーを順序付けできず、並べ替え操作で InvalidOperationExceptionをスローできます。

このメソッドは定義に過ぎません。効果を得るために、特定のクラスまたは値型によって実装する必要があります。 戻り値セクションで指定された比較の意味 ("前"、"と同じ位置で発生"、および "フォロー") は、特定の実装に依存します。

定義上、任意のオブジェクトが nullより大きい (または次の) nullを比較し、2 つの null 参照が互いに等しく比較されます。

パラメーター objは、このインターフェイスを実装するクラスまたは値型と同じ型である必要があります。それ以外の場合は、ArgumentException がスローされます。

注意 (実装者)

オブジェクト A、B、C の場合、次のことが当てはまる必要があります。

A.CompareTo(A) は 0 を返す必要があります。

A.CompareTo(B) が 0 を返す場合、B.CompareTo(A) は 0 を返す必要があります。

A.CompareTo(B) が 0 を返し、B.CompareTo(C) が 0 を返す場合、A.CompareTo(C) は 0 を返す必要があります。

A.CompareTo(B) が 0 以外の値を返す場合、B.CompareTo(A) は反対の符号の値を返す必要があります。

A.CompareTo(B) が 0 以外の値 "x" を返し、B.CompareTo(C) が "x" と同じ符号の値 "y" を返す場合、A.CompareTo(C) は "x" と "y" と同じ符号の値を返す必要があります。

注意 (呼び出し元)

クラスのインスタンスの順序を決定するには、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

こちらもご覧ください