Quelle est la différence entre les fonctions AddRange et Concat sur une liste générique? L'un est-il recommandé par rapport à l'autre?
Réponses:
Ils ont une sémantique totalement différente.
AddRange modifie la liste en y ajoutant les autres éléments.
Concat renvoie une nouvelle séquence contenant la liste et les autres éléments, sans modifier la liste.
Choisissez celui qui a la sémantique souhaitée.
La grande différence est que AddRange mute la liste par rapport à laquelle il est appelé tandis que Concat crée une nouvelle liste. Par conséquent, ils ont des utilisations différentes.
Concat est également une méthode d'extension qui s'applique à n'importe quel IEnumerable et renvoie un IEnumerable dont vous avez besoin d'un .ToList () pour générer une nouvelle List.
Si vous souhaitez étendre le contenu d'une liste existante, utilisez AddRange.
Si vous créez une nouvelle liste à partir de deux sources IEnumerable, utilisez Concat avec .ToList. Cela a la qualité de ne muter aucune des sources.
Si vous avez seulement besoin d'énumérer le contenu de deux listes (ou de tout autre IEnumerable), utilisez simplement Concat à chaque fois, cela a l'avantage de ne pas allouer de nouvelle mémoire pour contenir la liste unifiée.
J'ai trouvé cet article intéressant parlant de la différence entre ces 2 structures et comparant leurs performances ...
L'idée principale est qu'AddRange est beaucoup plus rapide lorsqu'il s'agit de collections de grande taille.
Voici le lien
J'espère que cela t'aides,
Concat
et AddRange
avec un List<KeyValuePair<string, string>>
avec 1000 éléments, concaténés / ajoutés 100 fois, et AddRange
c'était extrêmement plus rapide. Les résultats ont été les suivants: AddRange
13 ms, Concat().ToList()
16 000 ms, et Concat
sur une IEnumerable
seule action ToList
à la fin: 2 700 ms.