C# の複雑なオブジェクトを効率的に比較する
質問:
サブオブジェクトの複数のレイヤーを含む複雑なオブジェクトを比較するのは難しい場合があります。平等性を確保するための最適な方法を決定することは、パフォーマンスと精度にとって非常に重要です。
解決策:
カスタム型に IEquatable<T>
インターフェイスを実装し、継承された Object.Equals
メソッドと Object.GetHashCode
メソッドをオーバーライドして、複雑なオブジェクトを比較するための最速かつ最もカスタマイズされたソリューションを提供します。
詳細:
値型の場合、Equals
メソッドを直接呼び出すことができます。参照型の場合、効率を確保するために複数のチェックを組み合わせる必要があります:
ReferenceEquals
: 参照が同じオブジェクトを指しているかどうかを確認します。 NullReferenceException
を避けるために、インスタンスのフィールドまたはプロパティが null でないことを確認します。 IEquatable<T>.Equals
を呼び出します。オーバーライドされた Object.Equals
メソッドをバイパスし、速度を向上させます。 例:
<code class="language-csharp">public class Person : IEquatable<Person> { public int Age { get; set; } public string FirstName { get; set; } public Address Address { get; set; } public override bool Equals(Person other) { return this.Age.Equals(other.Age) && ( object.ReferenceEquals(this.FirstName, other.FirstName) || this.FirstName != null && this.FirstName.Equals(other.FirstName) ) && ( object.ReferenceEquals(this.Address, other.Address) || this.Address != null && this.Address.Equals(other.Address) ); } }</code>
代替:
IEquatable<T>
よりも遅く、汎用性が低くなります。 注:
IEquatable<T>
を実装していることを確認してください。 Object.GetHashCode
をオーバーライドして、実装された Equals
メソッドに基づいて適切なハッシュ コードを提供します。 IEquatable<T>
を使用しないでください。 以上がC# で複雑なオブジェクトを効率的に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。