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


インスタンスの等価性判断を目的とする型固有のメソッドを作成するために値型またはクラスで実装する、汎用のメソッドを定義します。Defines a generalized method that a value type or class implements to create a type-specific method for determining equality of instances.

generic <typename T>
public interface class IEquatable
public interface IEquatable<T>
type IEquatable<'T> = interface
Public Interface IEquatable(Of T)



比較するオブジェクトの型。The type of objects to compare.


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


このインターフェイスは、値を処理できる型 (数値クラスや文字列クラスなど) によって実装されます。This interface is implemented by types whose values can be equated (for example, the numeric and string classes). 値型またはクラスは、Equals メソッドを実装して、インスタンスの等価性を判断するために適した型固有のメソッドを作成します。A value type or class implements the Equals method to create a type-specific method suitable for determining equality of instances.


IComparable<T> インターフェイスは、実装する型のインスタンスの並べ替え順序を決定する CompareTo メソッドを定義します。The IComparable<T> interface defines the CompareTo method, which determines the sort order of instances of the implementing type. IEquatable<T> インターフェイスは、実装する型のインスタンスが等しいかどうかを判断する Equals メソッドを定義します。The IEquatable<T> interface defines the Equals method, which determines the equality of instances of the implementing type.

IEquatable<T> インターフェイスは、ContainsIndexOfLastIndexOfRemoveなどのメソッドで等しいかどうかをテストするときに、Dictionary<TKey,TValue>List<T>LinkedList<T> などのジェネリックコレクションオブジェクトによって使用されます。The IEquatable<T> interface is used by generic collection objects such as Dictionary<TKey,TValue>, List<T>, and LinkedList<T> when testing for equality in such methods as Contains, IndexOf, LastIndexOf, and Remove. ジェネリックコレクションに格納されている可能性のある任意のオブジェクトに対して実装する必要があります。It should be implemented for any object that might be stored in a generic collection.

注意 (実装者)

IEquatable<T> インターフェイスの型パラメーターを、このインターフェイスを実装している型に置き換えます。Replace the type parameter of the IEquatable<T> interface with the type that is implementing this interface. IEquatable<T>を実装する場合は、Equals(Object)GetHashCode() の基本クラスの実装もオーバーライドして、その動作が Equals(T) メソッドの動作と一致するようにする必要があります。If you implement IEquatable<T>, you should also override the base class implementations of Equals(Object) and GetHashCode() so that their behavior is consistent with that of the Equals(T) method. Equals(Object)をオーバーライドする場合、オーバーライドされた実装は、クラスの静的 Equals(System.Object, System.Object) メソッドの呼び出しでも呼び出されます。If you do override Equals(Object), your overridden implementation is also called in calls to the static Equals(System.Object, System.Object) method on your class. さらに、op_Equality 演算子と op_Inequality 演算子をオーバーロードする必要があります。In addition, you should overload the op_Equality and op_Inequality operators. これにより、すべての等しいテストで一貫性のある結果が返されるようになります。This ensures that all tests for equality return consistent results.

Equals(Object)のオーバーライドの詳細については、Equals(Object) の記事を参照してください。For information on overriding Equals(Object), see the Equals(Object) article.

値型の場合は、常に IEquatable<T> を実装し、Equals(Object) をオーバーライドしてパフォーマンスを向上させる必要があります。For a value type, you should always implement IEquatable<T> and override Equals(Object) for better performance. Equals(Object) ボックスの値型とは、2つの値が等しいかどうかを比較するためにリフレクションに依存します。Equals(Object) boxes value types and relies on reflection to compare two values for equality. Equals(T) の実装と Equals(Object) のオーバーライドは両方とも、一貫性のある結果を返す必要があります。Both your implementation of Equals(T) and your override of Equals(Object) should return consistent results. IEquatable<T>を実装する場合は、型のインスタンスの順序付けまたは並べ替えが可能な場合は、IComparable<T> も実装する必要があります。If you implement IEquatable<T>, you should also implement IComparable<T> if instances of your type can be ordered or sorted. 型が IComparable<T>を実装している場合は、ほとんどの場合、IEquatable<T>も実装します。If your type implements IComparable<T>, you almost always also implement IEquatable<T>.

型が注文関係をサポートしていても、等価性が順序の関係と異なる場合があることに注意してください。Note that there are some designs where a type supports an order relation, but equality may be distinct from an ordering relation. アルファベット順に並べ替える `Person` クラスを考えてみましょう。Consider a `Person` class where you sort alphabetically. 同じ名前の2人のユーザーが同じように並べ替えられますが、同じユーザーではありません。Two people with the same name sort the same, but are not the same person.



現在のオブジェクトが、同じ型の別のオブジェクトと等しいかどうかを示します。Indicates whether the current object is equal to another object of the same type.