ホームページ > バックエンド開発 > C++ > C# で参照型の 2 つのインスタンスを比較するにはどうすればよいですか?

C# で参照型の 2 つのインスタンスを比較するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-07 17:37:39
オリジナル
494 人が閲覧しました

How Should I Compare Two Instances of a Reference Type in C#?

ベスト プラクティス: C# での 2 つの参照型インスタンスの比較

参照型を比較す​​るときは、期待される動作 (値の同一性または参照の同一性) を必ず明確にしてください。

等価演算子 ("==") と Equals メソッドをオーバーライドして参照の同一性を実現します

以前は、開発者は「==」メソッドと Equals メソッドをオーバーライドして、参照の同一性をチェックしていました。ただし、特定の状況ではあいまいさが生じる可能性があるため、コーディング標準ではこれを行わないよう推奨しています。

オプション 1: 値の等価性のために IEquatable インターフェイス

を実装する

値セマンティクスを持つ参照型 (等価が等価として扱われる不変型) の場合、推奨されるアプローチは System.IEquatable インターフェイスを実装することです。これにより、参照ではなく値に焦点を当てたカスタムの等価比較を定義できます。

例:

<code class="language-csharp">class Point : IEquatable<Point> {
    // ...
    public bool Equals(Point other) {
        return X.Equals(other.X) && Y.Equals(other.Y);
    }
    // ...
}</code>
ログイン後にコピー

オプション 2: 型チェックを備えたカスタム Equals メソッドを使用して値の等価性を実現します

カスタム Equals メソッドを使用する場合は、参照の同等性と比較されるオブジェクトの型の両方をチェックするようにしてください。これにより、派生クラス オブジェクトを比較する際の予期しない動作が防止されます。

例:

<code class="language-csharp">public bool Equals(Point other) {
    if (other is null) return false;
    if (other.GetType() != GetType()) return false;
    return X.Equals(other.X) && Y.Equals(other.Y);
}</code>
ログイン後にコピー

参照 ID を使用する場合

不変の値を表さない参照クラスには、「==」および「!=」演算子を実装しないでください。代わりに、オブジェクトの同一性を比較するデフォルトの動作に依存してください。

以上がC# で参照型の 2 つのインスタンスを比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート