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

C# で参照型を最適に比較するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-07 17:42:46155ブラウズ

How to Best Compare Reference Types in C#?

C# 参照型比較のベスト プラクティス

参照型を扱うときは、通常、参照ではなく値を比較する必要があります。等価演算子 (==) または Equals メソッドをオーバーライドするのが一般的ですが、参照型を正確かつ効率的に比較するために考慮すべき他の方法もあります。

System.IEquatable インターフェイスを実装します

参照型の値のセマンティクス (等価とは等しいことを意味します) には、System.IEquatable インターフェイスを使用することをお勧めします。このインターフェイスは、詳細な値の比較を可能にする、厳密に型指定された Equals メソッドを提供します。 IEquatable を実装すると、オブジェクトの参照だけでなく、実際の値にも等価性チェックが確実に適用されます。

例:

値の等価性を実装するクラスを考えてみましょう:

<code class="language-csharp">class Point : IEquatable<Point> {
    public Point(int x, int y) => (X, Y) = (x, y);
    public int X { get; }
    public int Y { get; }

    public bool Equals(Point other) =>
        X == other.X && Y == other.Y;

    public static bool operator ==(Point lhs, Point rhs) =>
        lhs.Equals(rhs);

    public static bool operator !=(Point lhs, Point rhs) =>
        !lhs.Equals(rhs);

    public override bool Equals(object obj) =>
        Equals(obj as Point);
}</code>

オブジェクト等価メソッドをオーバーライドします

不変の値を表さない参照型の場合、Object クラスの Equals のデフォルト実装をオーバーライドすることはお勧めできません。デフォルトの実装ではオブジェクト参照が比較されますが、これは常に理想的であるとは限りません。代わりに、深さの値の比較に IEquatable インターフェイスを使用することを検討してください。

GetHashCode オーバーライド

参照型の等価性を実装する場合は、GetHashCode() メソッドをオーバーライドすることも重要です。これにより、同じ値を持つオブジェクトが同じハッシュ コードを持つことが保証されるため、辞書などのハッシュされたコレクションを操作するときのパフォーマンスが向上します。

実装の詳細:

コード例では、Equals メソッドは null チェックを実行し、次に型チェックを実行して、比較されるオブジェクトが同じ型であることを確認します。実際の値の比較は属性ごとに実行されます。

GetHashCode メソッドは、HashCode.Combine() メソッドを使用して X プロパティと Y プロパティのハッシュ コードを結合し、同じ値を持つオブジェクトに対して一貫したハッシュ コードが生成されるようにします。

これらのベスト プラクティスに従うことで、開発者は参照型を効率的かつ正確に比較し、等価演算がオブジェクトの意図したセマンティクスと一致することを保証できます。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。