英語で読む

次の方法で共有


IEquatable<T> インターフェイス

定義

インスタンスの等価性を判断するための型固有のメソッドを作成するために値型またはクラスが実装する一般化されたメソッドを定義します。

C#
public interface IEquatable<T>

型パラメーター

T

比較するオブジェクトの種類。

派生

IEquatable<T>.Equals メソッドの例を参照してください。

注釈

このインターフェイスは、値を等しい値にすることができる型 (数値クラスや文字列クラスなど) によって実装されます。 値の型またはクラスは、インスタンスの等価性を判断するのに適した型固有のメソッドを作成する Equals メソッドを実装します。

注意

IComparable<T> インターフェイスは、実装する型のインスタンスの並べ替え順序を決定する CompareTo メソッドを定義します。 IEquatable<T> インターフェイスは、実装する型のインスタンスの等価性を決定する Equals メソッドを定義します。

IEquatable<T> インターフェイスは、Dictionary<TKey,TValue>List<T>ContainsIndexOfLastIndexOfRemoveなどのメソッドの等価性をテストするときに、LinkedList<T> などの汎用コレクション オブジェクトによって使用されます。 ジェネリック コレクションに格納される可能性のある任意のオブジェクトに対して実装する必要があります。

注意 (実装者)

IEquatable<T> インターフェイスの型パラメーターを、このインターフェイスを実装している型に置き換えます。

IEquatable<T>を実装する場合は、Equals(Object)GetHashCode() の基底クラスの実装をオーバーライドして、その動作が Equals(T) メソッドの基底クラスの実装と一致するようにする必要もあります。 Equals(Object)をオーバーライドする場合、オーバーライドされた実装は、クラスの静的 Equals(System.Object, System.Object) メソッドの呼び出しでも呼び出されます。 さらに、op_Equality 演算子と op_Inequality 演算子をオーバーロードする必要があります。 これにより、等価性のすべてのテストで一貫した結果が返されることが保証されます。

Equals(Object)のオーバーライドについては、Equals(Object)を参照してください。

値型の場合は、パフォーマンスを向上させるために、常に IEquatable<T> を実装し、Equals(Object) をオーバーライドする必要があります。 Equals(Object) ボックスには値型があり、リフレクションに依存して 2 つの値が等しいかどうかを比較します。 Equals(T) の実装と Equals(Object) のオーバーライドの両方で、一貫した結果が返されます。

IEquatable<T>を実装する場合は、型のインスタンスを並べ替えたり並べ替えたりできるかどうかを IComparable<T> も実装する必要があります。 型が IComparable<T>を実装している場合は、ほとんどの場合、IEquatable<T>も実装します。

型が順序関係をサポートするデザインもありますが、等価性は順序関係とは異なる場合があることに注意してください。 アルファベット順に並べ替える Person クラスについて考えてみましょう。 同じ名前の 2 人は同じ並べ替えを行いますが、同じ人物ではありません。

メソッド

Equals(T)

現在のオブジェクトが同じ型の別のオブジェクトと等しいかどうかを示します。

適用対象

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

こちらもご覧ください