C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のIStructuralEquatableインターフェースとは?構造的な等価性の比較方法を解説

IStructuralEquatableインターフェースの概要

IStructuralEquatableインターフェースは、オブジェクト同士を「構造的な等価性(structural equality)」で比較するためのメソッドを定義するインターフェースです。
ここでいう構造的な等価性とは、2つのオブジェクトが同じ値を持っている場合に等しいとみなすという概念のことです。参照の同一性ではなく、中身の値が一致しているかどうかで判断される点が特徴です。

IStructuralEquatableの主なメソッド

このインターフェースには、以下の2つのメソッドが含まれています。

番号メソッドと説明
1Equals(Object, IEqualityComparer)
指定したオブジェクトが、現在のインスタンスと構造的に等しいかどうかを判定します。
2GetHashCode(IEqualityComparer)
現在のインスタンスに対するハッシュコードを返します。

使用例:タプルとIStructuralEquatableの組み合わせ

それでは、タプル(Tuple)オブジェクトを作成し、IStructuralEquatableインターフェースを使って比較を行う例を見てみましょう。

タプルの作成

var tupleOne = Tuple.Create(26.3, Double.NaN, 35.6);
var tupleTwo = Tuple.Create(26.3, Double.NaN, 35.6);

ここでは、同じ値を持つ2つのタプルを作成しています。2つ目の要素には Double.NaN を指定しています。

既定の比較子を使った等価性のチェック

次に、IStructuralEquatable.Equals メソッドを呼び出し、既定の比較子(EqualityComparer)を使って2つのタプルの等価性を確認します。

IStructuralEquatable chk = tupleOne;
Console.WriteLine(chk.Equals(tupleTwo, EqualityComparer<object>.Default));

このコードを実行すると、コンソールには True が出力されます。
これは、2つのタプルが持つ各要素の値が構造的に等しいと判定されたためです。通常の参照比較では異なるインスタンスとして扱われますが、IStructuralEquatableを使うことで「値の中身」に基づいた比較が可能になります。

まとめ

IStructuralEquatableインターフェースは、タプルや配列など複数の値を持つオブジェクトを、その内容に基づいて比較したい場合に非常に便利です。EqualsメソッドとGetHashCodeメソッドを適切に活用することで、柔軟かつ正確な等価性の判定を実現できます。

  1. Twitterのバイオとは?意味・変更方法と魅力的な例文を徹底解説

    Twitterのバイオとは?その意味と役割Twitterのバイオ(自己紹介文)は、プロフィール設定を構成する重要な要素のひとつです。プロフィール画面では、名前とハンドルネーム(@ユーザー名)の下に表示されます。自分がどのような人物なのかを短く紹介したり、興味や関心を伝えたり、自分のビジネスをアピールしたりするために活用しましょう。バイオの変更方法バイオはプロフィールの編集からいつでも変更できます。ハッシュタグ(#)や@ユーザー名を組み合わせれば、より多くの人に自分のアカウントを見つけてもらいやすくなります。なお、バイオにはスペースを含めて160文字までという文字数制限がある点に注意してください

  2. Pythonの&=演算子とは?ビット演算とインプレース代入の仕組みを解説

    &=演算子の正体:object.__iand__()メソッドPythonにおける &= 演算子は、object.__iand__() メソッドに対するシンタックスシュガー(糖衣構文)です。公式ドキュメントには以下のように記載されています。「これらのメソッドは、拡張代入演算子(+=、-=、*=、@=、/=、//=、%=、**=、<<=、>>=、&=、^=、|=)を実装するために呼び出されます。これらのメソッドは、可能な限りインプレース(self自身を直接変更する形)で操作を行い、その結果を返すことが求められます(返り値はselfである必要はありませ