¿Cuál es la diferencia entre las funciones AddRange y Concat en una lista genérica? ¿Se recomienda uno sobre el otro?
Respuestas:
Tienen una semántica totalmente diferente.
AddRange modifica la lista agregando los otros elementos a ella.
Concat devuelve una nueva secuencia que contiene la lista y los otros elementos, sin modificar la lista.
Elija el que tenga la semántica que desee.
La gran diferencia es que AddRange muta la lista contra la que se llama, mientras que Concat crea una nueva lista. De ahí que tengan diferentes usos.
Además, Concat es un método de extensión que se aplica a cualquier IEnumerable y devuelve un IEnumerable, necesita un .ToList () para generar una nueva Lista.
Si desea ampliar el contenido de una lista existente, utilice AddRange.
Si está creando una nueva lista a partir de dos fuentes IEnumerable, utilice Concat con .ToList. Esto tiene la cualidad de que no muta ninguna de las fuentes.
Si solo necesita enumerar el contenido de dos Listas (o cualquier otro IEnumerable), simplemente use Concat cada vez, esto tiene la ventaja de no asignar nueva memoria para contener la lista unificada.
Encontré este interesante artículo hablando de la diferencia entre estas 2 estructuras y comparando su rendimiento ...
La idea principal es que AddRange es mucho más rápido cuando se trata de colecciones de gran tamaño.
Aquí está el enlace
Espero que esto ayude,
Concat
y AddRange
con List<KeyValuePair<string, string>>
1000 elementos, concatené / agregué 100 veces y AddRange
fue extremadamente más rápido. Los resultados fueron estos: AddRange
13 ms, Concat().ToList()
16,000 ms, y Concat
al IEnumerable
hacer solo el ToList
al final: 2,700 ms.