ホームページ >バックエンド開発 >C++ >C# でオブジェクトのプロパティを効率的に比較して同等かどうかを確認するにはどうすればよいですか?

C# でオブジェクトのプロパティを効率的に比較して同等かどうかを確認するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-22 22:26:10474ブラウズ

How Can I Efficiently Compare Object Properties for Equality in C#?

C# でのオブジェクト プロパティの効率的な比較

この記事では、C# でオブジェクトのプロパティを比較する効率的な方法について説明します。 共通の課題は、同じタイプの 2 つのオブジェクトが同じプロパティ値を持つかどうかを判断することです。 LINQ と拡張メソッドを活用した改善されたアプローチを検討します。

拡張プロパティ比較メソッド

次の C# コードは、オブジェクトのプロパティを比較するための洗練されたソリューションを提供します。

<code class="language-csharp">public static bool PublicInstancePropertiesEqual<T>(this T self, T to, params string[] ignore) where T : class
{
    if (self != null && to != null)
    {
        var type = typeof(T);
        var ignoreList = new List<string>(ignore);
        var unequalProperties =
            from pi in type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
            where !ignoreList.Contains(pi.Name) && pi.GetUnderlyingType().IsSimpleType() && pi.GetIndexParameters().Length == 0
            let selfValue = type.GetProperty(pi.Name).GetValue(self, null)
            let toValue = type.GetProperty(pi.Name).GetValue(to, null)
            where selfValue != toValue && (selfValue == null || !selfValue.Equals(toValue))
            select selfValue;
        return !unequalProperties.Any();
    }
    return self == to;
}</code>

この方法では、いくつかの重要な改善点が提供されます。

  • LINQ 統合: LINQ を使用すると、プロパティの反復が合理化され、従来の for ループと比較して可読性が向上し、パフォーマンスが向上する可能性があります。
  • 拡張メソッド: 拡張メソッドとして実装され、オブジェクトを比較する際に、より簡潔で流暢な構文が可能になります。
  • 単純型検証: プロパティが単純型 (例: intstringbool) であるかどうかを明示的にチェックし、複雑なオブジェクト プロパティを扱う際の潜在的なエラーを防ぎます。 これにより、再帰の問題が回避されます。

この最適化されたアプローチにより、明確さと使いやすさを維持しながら、オブジェクト プロパティの効率的かつ信頼性の高い比較が保証されます。

以上がC# でオブジェクトのプロパティを効率的に比較して同等かどうかを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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