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.

LinkedList<T> List<T> Contains Dictionary<TKey,TValue>インターフェイスはRemove、、、 、LastIndexOfなどのメソッドIndexOfで等価性をテストするときに、、、などのジェネリックコレクションオブジェクトによって使用されます。 IEquatable<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_Equalityop_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.