コレクション内での比較と並べ替え
System.Collections クラスは、削除する要素を検索する場合でも、キーと値の組み合わせから成る値を返す場合でも、コレクションの管理に関するほぼすべての処理において比較を実行します。
比較には、2 つの構成体が使用されます。 Object から継承または派生された Equals メソッドは、単純に、Boolean を返して 2 つのオブジェクトが等しいかどうかを示します。 IComparable.CompareTo メソッドと IComparer.Compare メソッドは、2 つの値を相互に比較した結果を示す整数を返します。 等号は等価性の確認に使用し、IComparable.CompareTo メソッドと IComparer.Compare メソッドおよびジェネリック インターフェイスの同等のメソッド (IComparer<T>.Compare メソッドと IComparable<T>.CompareTo メソッド) は保存に使用します。
コレクション内の要素の比較、または要素と指定された値の比較を実行できます。 比較演算子が明示的に指定されていない場合、比較されるオブジェクトのうち、少なくとも 1 つが IComparable インターフェイスを実装し、そのオブジェクト自体を他のオブジェクトと比較できる必要があります。
一部のクラスには、IComparer の実装をパラメーターとして受け入れるメソッドがあります。 これらのメソッドが使用され、IComparer パラメーターが null 参照 (Visual Basic の場合は Nothing) でない場合は、比較対象のオブジェクト自体が IComparable を実装している必要はありません。 ただし、リスト コレクションで値として使用、またはディクショナリ コレクションでキーとして使用できるクラスに IComparable を実装することをお勧めします。
ディクショナリ コレクションに対するコンストラクター オーバーロードの中には IComparer 実装を受け入れるものがあります。これは、比較が必要なときにキーを比較するのに使用されます。 Array には、IComparer 実装を受け入れる Sort メソッドのオーバーロードがあり、Sort メソッドへの特定の呼び出しに対してのみ使用されます。
システムの現在のカルチャの設定が、コレクション内の比較や並べ替えに影響する場合があります。 既定では、Collections クラス内の比較や並べ替えはカルチャに依存します。 カルチャの設定を無視して、一貫性のある比較と並べ替えの結果を得るには、InvariantCulture を、CultureInfo を受け入れるメンバーのオーバーロードと共に使用します。 詳細については、「カルチャを認識しないコレクションの操作の実行」と「カルチャを認識しない配列の操作の実行」を参照してください。