Comparez efficacement des objets complexes C#
Question :
Comparer des objets complexes contenant plusieurs couches de sous-objets peut être délicat. Déterminer la meilleure façon de garantir l’égalité est essentiel pour la performance et la précision.
Solution :
Implémente l'interface IEquatable<T>
sur les types personnalisés et remplace les méthodes héritées Object.Equals
et Object.GetHashCode
pour fournir la solution la plus rapide et la plus personnalisée pour comparer des objets complexes.
Détails :
Pour les types valeur, vous pouvez appeler la méthode Equals
directement. Pour les types de référence, plusieurs contrôles doivent être combinés pour garantir l'efficacité :
ReferenceEquals
: Vérifiez si la référence pointe vers le même objet. NullReferenceException
. IEquatable<T>.Equals
: contourne la méthode Object.Equals
remplacée et améliore la vitesse. Exemple :
<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 override bool Equals(Person other) { return this.Age.Equals(other.Age) && ( object.ReferenceEquals(this.FirstName, other.FirstName) || this.FirstName != null && this.FirstName.Equals(other.FirstName) ) && ( object.ReferenceEquals(this.Address, other.Address) || this.Address != null && this.Address.Equals(other.Address) ); } }</code>
Alternative :
IEquatable<T>
. Remarque :
IEquatable<T>
. Object.GetHashCode
pour fournir un code de hachage approprié basé sur la méthode Equals
implémentée. IEquatable<T>
pour les types mutables afin d'éviter un comportement incohérent dans les collections qui reposent sur l'identité. 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!