2008-09-19 12 views

Respuesta

94

Tienen una semántica totalmente diferente.

AddRange modifica la lista al agregarle los otros elementos.

Concat devuelve una nueva secuencia que contiene la lista y los otros elementos, sin modificar la lista.

Elija la que tenga la semántica que desee.

+0

Por lo tanto, si se trata de un circuito cerrado, sería mucho mejor utilizar el rango de adición para no perder rendimiento debido a todos los cambios internos y al golpeteo del GC. – johnc

+33

En realidad, debido a la ejecución diferida, el uso de Concat probablemente sea más rápido porque * evita * la asignación de objetos: Concat no copia nada, solo crea enlaces entre las listas, por lo que al enumerarlo y llegar al final lo lleva transparentemente al comienzo de la próxima! –

28

La gran diferencia es que AddRange muta esa lista contra la que se llama mientras que Concat crea una nueva lista. Por lo tanto, tienen diferentes usos.

También Concat es un método de extensión que se aplica a cualquier IEnumerable y devuelve un IEnumerable que necesita un .ToList() para dar como resultado 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 de IEnumerable, utilice Concat con .ToList. Esto tiene la calidad de que no muta ni 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 memoria nueva para contener la lista unificada.

+0

+1, De hecho, si olvida 'tolist', concat silenciosamente no hace nada – smirkingman