ベスト プラクティス: 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 サイトの他の関連記事を参照してください。