在 C# 中高效比较对象属性
本文探讨了在 C# 中比较对象属性的有效方法。 一个常见的挑战是确定同一类型的两个对象是否具有相同的属性值。 我们将研究一种利用 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
循环相比,LINQ 的使用简化了属性迭代,增强了可读性并可能提高性能。int
、string
、bool
),防止处理复杂对象属性时出现潜在错误。 这避免了递归问题。这种优化方法可确保对象属性的高效可靠比较,同时保持清晰度和易用性。
以上是如何在 C# 中有效比较对象属性是否相等?的详细内容。更多信息请关注PHP中文网其他相关文章!