Si j'ai:
List<string> myList1;
List<string> myList2;
myList1 = getMeAList();
// Checked myList1, it contains 4 strings
myList2 = getMeAnotherList();
// Checked myList2, it contains 6 strings
myList1.Concat(myList2);
// Checked mylist1, it contains 4 strings... why?
J'ai exécuté un code similaire à celui-ci dans Visual Studio 2008 et défini des points d'arrêt après chaque exécution. Après myList1 = getMeAList();
, myList1
contient quatre chaînes, et j'ai appuyé sur le bouton plus pour m'assurer qu'elles n'étaient pas toutes nulles.
Après myList2 = getMeAnotherList();
, myList2
contient six chaînes, et j'ai vérifié qu'elles n'étaient pas nulles ... Après myList1.Concat(myList2);
myList1 ne contenait que quatre chaînes. Pourquoi donc?
IEnumerable<T>
Ça marche bien, je pense. Comme indiqué précédemment, Concat renvoie une nouvelle séquence et lors de la conversion du résultat en List, il fait parfaitement le travail.
la source
Il convient également de noter que Concat fonctionne en temps constant et en mémoire constante. Par exemple, le code suivant
donne les métriques de synchronisation / mémoire suivantes:
la source
Je sais que c'est vieux mais je suis tombé sur ce post en pensant que Concat serait ma réponse. Union a très bien fonctionné pour moi. Notez que cela ne renvoie que des valeurs uniques, mais sachant que j'obtenais de toute façon des valeurs uniques, cette solution a fonctionné pour moi.
La sortie est:
la source
Jetez un œil à ma mise en œuvre. Il est à l'abri des listes nulles.
la source