Was ist der Unterschied zwischen den Funktionen AddRange und Concat in einer generischen Liste? Wird eins über das andere empfohlen?
.net
linq
list
extension-methods
Johnc
quelle
quelle
Der große Unterschied besteht darin, dass AddRange die Liste mutiert, für die es aufgerufen wird, während Concat eine neue Liste erstellt. Daher haben sie unterschiedliche Verwendungszwecke.
Concat ist auch eine Erweiterungsmethode, die für jede IEnumerable gilt und eine IEnumerable zurückgibt. Sie benötigen eine .ToList (), um eine neue Liste zu erstellen.
Wenn Sie den Inhalt einer vorhandenen Liste erweitern möchten, verwenden Sie AddRange.
Wenn Sie eine neue Liste aus zwei IEnumerable-Quellen erstellen, verwenden Sie Concat mit .ToList. Dies hat die Qualität, dass es keine der Quellen mutiert.
Wenn Sie immer nur den Inhalt von zwei Listen (oder einer anderen IEnumerable) auflisten müssen, verwenden Sie einfach jedes Mal Concat. Dies hat den Vorteil, dass kein neuer Speicher für die einheitliche Liste zugewiesen wird.
quelle
Ich fand diesen interessanten Artikel über den Unterschied zwischen diesen beiden Strukturen und den Vergleich ihrer Leistung ...
Die Hauptidee ist, dass AddRange viel schneller ist, wenn es um große Sammlungen geht.
Hier ist der Link
Hoffe das hilft,
quelle
Concat
undAddRange
mit einemList<KeyValuePair<string, string>>
mit 1000 Elementen, verkettete / hinzugefügt 100 mal undAddRange
war extrem schneller. Die Ergebnisse waren folgende:AddRange
13 ms,Concat().ToList()
16.000 ms undConcat
bei einemIEnumerable
Tun nur dasToList
am Ende: 2.700 ms.