Antworten:
Sie haben eine völlig andere Semantik.
AddRange ändert die Liste, indem die anderen Elemente hinzugefügt werden.
Concat gibt eine neue Sequenz zurück, die die Liste und die anderen Elemente enthält, ohne die Liste zu ändern.
Wählen Sie die Semantik aus, die Sie möchten.
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.
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,
Concat
und AddRange
mit einem List<KeyValuePair<string, string>>
mit 1000 Elementen, verkettete / hinzugefügt 100 mal und AddRange
war extrem schneller. Die Ergebnisse waren folgende: AddRange
13 ms, Concat().ToList()
16.000 ms und Concat
bei einem IEnumerable
Tun nur das ToList
am Ende: 2.700 ms.