Comparer efficacement les propriétés d'objets en C#
Cet article explore des méthodes efficaces pour comparer les propriétés d'objets en C#. Un défi courant consiste à déterminer si deux objets du même type ont des valeurs de propriété identiques. Nous examinerons une approche améliorée tirant parti de LINQ et des méthodes d'extension.
Méthode de comparaison de propriétés améliorée
Le code C# suivant fournit une solution raffinée pour comparer les propriétés des objets :
<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>
Cette méthode offre plusieurs améliorations clés :
for
traditionnelles.int
, string
, bool
), évitant ainsi les erreurs potentielles lors du traitement de propriétés d'objet complexes. Cela évite les problèmes de récursion.Cette approche optimisée garantit une comparaison efficace et fiable des propriétés des objets tout en conservant la clarté et la facilité d'utilisation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!