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>
この方法では、いくつかの重要な改善点が提供されます。
for
ループと比較して可読性が向上し、パフォーマンスが向上する可能性があります。int
、string
、bool
) であるかどうかを明示的にチェックし、複雑なオブジェクト プロパティを扱う際の潜在的なエラーを防ぎます。 これにより、再帰の問題が回避されます。この最適化されたアプローチにより、明確さと使いやすさを維持しながら、オブジェクト プロパティの効率的かつ信頼性の高い比較が保証されます。
以上がC# でオブジェクトのプロパティを効率的に比較して同等かどうかを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。