¿Cuál es la diferencia entre las funciones AddRange y Concat en una lista genérica? ¿Se recomienda uno sobre el otro?.NET List <T> Concat vs AddRange
Respuesta
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.
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.
+1, De hecho, si olvida 'tolist', concat silenciosamente no hace nada – smirkingman
- 1. ObservableCollection <> vs. List <>
- 2. LISTA <> AddRange tirar ArgumentException
- 3. Lista <? extiende Base> VS List <Base>
- 4. Queue <T> vs List <T>
- 5. List.empty vs. List() vs. new List()
- 6. C# LINQ `Lista <Interface> .AddRange` método no funciona
- 7. List vs Set vs Bag en NHibernate
- 8. C# List <> Ordene con 3 propiedades .Net 2.0
- 9. C# List <T> .ConvertAll en .NET 2.0
- 10. Lista <IJob> .AddRange (Lista <Job>) No funciona
- 11. .NET Casting Generic List
- 12. List <T> to DataView
- 13. AddRange en una colección
- 14. T en clase? AddRange ICollection?
- 15. List <> propia comparador
- 16. ICollection <T> Vs List <T> en Entity Framework
- 17. Una vez más en la cadena Sufijo vs vs + concat
- 18. .Net 4: forma fácil de crear dinámicamente List <Tuple<...>> resultados
- 19. ¿Cómo se diferencia un multimap STL de .NET Dictionary <key, List <values>>?
- 20. Realloc Vs Linked List Scanning
- 21. Python numpy array vs list
- 22. DataTable to List <object>
- 23. Modelado de series de tiempo en f # - seq vs array vs vector vs list vs generic list
- 24. C# Casting a List <ObjBase> como List <Obj>
- 25. Casting List <> de la clase derivada a List <> de la clase base
- 26. ASP.NET <%= %> vs <%: %>
- 27. IEnumerable <T> VS VS IList <T> IQueryable <T>
- 28. Convertir diccionario a List <KeyValuePair>
- 29. Sort List <DateTime> Descending
- 30. C# List <> Add() método rendimiento
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
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! –