MSDN ライブラリ
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

IStructuralEquatable インターフェイス

2013/12/12

オブジェクトの構造上の等価性比較をサポートするメソッドを定義します。

Namespace:  System.Collections
アセンブリ:  mscorlib (mscorlib.dll 内)

public interface IStructuralEquatable

IStructuralEquatable 型で公開されるメンバーは以下のとおりです。

  名前説明
パブリック メソッドEqualsオブジェクトが現在のインスタンスと構造的に等しいかどうかを判断します。
パブリック メソッドGetHashCode現在のインスタンスのハッシュ コードを返します。
このページのトップへ

構造が等しいということは、2 つのオブジェクトが同じ値を持つため等しいことを意味します。これは、参照が等しいこととは異なります。参照が等しいということは、2 つのオブジェクト参照が同じ物理オブジェクトを参照しているため等しいことを意味します。IStructuralEquatable インターフェイスを使用すると、比較方法をカスタマイズして実装し、コレクション オブジェクトの構造が等しいかどうかを確認できます。つまり、構造が等しいかどうかの定義を独自に作成し、この定義が、IStructuralEquatable インターフェイスを受け付けるコレクション型で使用されるように指定できます。このインターフェイスには、指定された IEqualityComparer 実装を使用して等しいかどうかをテストする Equals と、等しいオブジェクトに対して同じハッシュ コードを返す GetHashCode の 2 つのメンバーがあります。

メモメモ:

IStructuralEquatable インターフェイスは、構造が等しいかどうかのカスタム比較のみをサポートします。IStructuralComparable インターフェイスは、並べ替えおよび順序のカスタム構造比較をサポートします。

.NET Framework は既定の等値比較子も提供しており、これは、EqualityComparer<T>.Default プロパティによって返されます。詳細については、例を参照してください。

ジェネリック組クラス (Tuple<T1>Tuple<T1, T2>Tuple<T1, T2, T3> など) および Array クラスは、IStructuralEquatable インターフェイスを明示的に実装しています。配列または組の現在のインスタンスを IStructuralEquatable インターフェイス値にキャスト (C#) または変換 (Visual Basic) し、IEqualityComparer 実装を引数として Equals メソッドの提供することで、配列またはコレクションのカスタム等価比較を定義できます。

既定の等値比較子 EqualityComparer<Object>.Default.Equals は、2 つの NaN 値を等しいと見なします。ただし、場合によっては、値を比較できないことを示す false を返すように、NaN 値が等しいかどうかの比較をすることをお勧めします。次の例では、IStructuralEquatable インターフェイスを実装する NanComparer クラスを定義しています。これは、等値演算子を使用して 2 つの Double 値または 2 つの Single 値を比較します。これは、その他の型の値を既定の等値比較子に渡します。

次の例は、構成要素が 3 つの Double 値で構成される 2 つの同一の 3 組オブジェクトを作成します。2 番目のコンポーネントの値は Double.NaN です。この例は、次に、Tuple<T1, T2, T3>.Equals メソッドを呼び出し、このメソッドが IStructuralEquatable.Equals メソッドを 2 回呼び出します。最初は、それは EqualityComparer<T>.Default プロパティによって返される既定の等値比較子を渡します。2 回目に、それはカスタム NanComparer オブジェクトを渡します。例の出力に示すように、最初の 2 つのメソッド呼び出しは true を返し、3 番目の呼び出しは false を返します。

Windows Phone OS

サポート: 8.0

表示:
© 2016 Microsoft