¿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 <T> .ConvertAll en .NET 2.0
- 9. C# List <> Ordene con 3 propiedades .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. ¿Cómo se diferencia un multimap STL de .NET Dictionary <key, List <values>>?
- 19. .Net 4: forma fácil de crear dinámicamente List <Tuple<...>> resultados
- 20. Python numpy array vs list
- 21. Realloc Vs Linked List Scanning
- 22. DataTable to List <object>
- 23. C# Casting a List <ObjBase> como List <Obj>
- 24. Casting List <> de la clase derivada a List <> de la clase base
- 25. Modelado de series de tiempo en f # - seq vs array vs vector vs list vs generic list
- 26. ASP.NET <%= %> vs <%: %>
- 27. IEnumerable <T> VS VS IList <T> IQueryable <T>
- 28. C# List <> GroupBy 2 Valora
- 29. ¿Está std :: list <> :: sort stable?
- 30. Android save List <String>
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! –