Lorsque vous traitez plusieurs listes d'objets, il est souvent nécessaire de les combiner en une unité cohérente. . Dans ce scénario, vous disposez de deux listes d'objets Person et souhaitez les fusionner, en calculant la valeur Change comme la différence entre leurs valeurs respectives s'il existe des doublons.
Pour y parvenir, LINQ propose une méthode d'extension puissante : Union . Par défaut, cette méthode supprime les doublons en fonction des méthodes Equals et GetHashCode définies dans la classe Person. Si ces méthodes ne sont pas remplacées dans votre classe Person ou si vous souhaitez effectuer une comparaison personnalisée, voici comment procéder :
Au sein de votre Person classe, remplacez les méthodes Equals et GetHashCode pour comparer les objets en fonction de la propriété souhaitée, telle que Nom :
public override bool Equals(object obj) { // Convert object to a Person for comparison var person = obj as Person; if (person == null) return false; return Equals(person); } public override int GetHashCode() { return Name.GetHashCode(); } public bool Equals(Person personToCompareTo) { if (personToCompareTo == null) return false; if (string.IsNullOrEmpty(personToCompareTo.Name)) return false; return Name.Equals(personToCompareTo.Name); }
Implémentez une classe de comparaison qui implémente l'interface IEqualityComparer. Fournissez ce comparateur comme deuxième paramètre dans la méthode d'extension Linq Union :
// Implement IEqualityComparer<Person> public bool Equals(Person x, Person y) { // Your custom comparison here } public int GetHashCode(Person person) { // Your custom hash code generation here } var mergedList = list1.Union(list2, new MyPersonComparer());
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!