C# 4.0 の複雑な入れ子オブジェクトの高性能等価性チェック
深くネストされた構造を持つ複雑なオブジェクトを同等かどうか比較すると、計算コストが高くなる可能性があります。この記事では、速度と効率に焦点を当てた、C# 4.0 向けに高度に最適化されたソリューションを紹介します。
課題: それぞれ 5 レベル以上のネストされたサブオブジェクトを含む 2 つの複雑なオブジェクト間の同等性を効率的に判断します。
最適な解決策: IEquatable<T>
インターフェースを活用します。すべてのカスタム クラス (ネストされたクラスを含む) にこのインターフェイスを実装すると、一般的なシリアル化ベースのアプローチと比較してパフォーマンスが大幅に向上します。
実装戦略:
値の型: 組み込みの値の型 (int
、string
など) の場合は、効率的な比較のために直接 Equals()
メソッドを使用します。
参照型:
ReferenceEquals()
を使用して参照の等価性をチェックすることから始めます。同一の参照は同等であることを意味します。NullReferenceException
.Equals()
呼び出し: 各サブオブジェクトで Equals()
メソッドを再帰的に呼び出します。 IEquatable<T>
はサブオブジェクトに対して実装されているため、オーバーライドされた IEquatable<T>.Equals()
メソッドを直接呼び出し、低速な Object.Equals()
メソッドを回避します。
説明例 (3 レベルのネスト):
<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 bool Equals(Person other) { // ...Implementation using ReferenceEquals and recursive Equals calls... } } public class Address : IEquatable<Address> { public int HouseNo { get; set; } public string Street { get; set; } public City City { get; set; } public bool Equals(Address other) { // ...Implementation using ReferenceEquals and recursive Equals calls... } } public class City : IEquatable<City> { public string Name { get; set; } public bool Equals(City other) { // ...Implementation using ReferenceEquals and recursive Equals calls... } }</code>
を実装し、各クラスで IEquatable<T>
メソッドを慎重にオーバーライドすることにより、C# 4.0 では、複雑で深くネストされたオブジェクトに対する効率的で信頼性の高い等価比較が実現します。 この方法では、他のアプローチよりも大幅に高速なパフォーマンスが保証されます。Equals()
以上がC# 4.0 で複雑な入れ子になったオブジェクトの同等性を比較する最速の方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。