В чем разница между функциями AddRange и Concat в общем списке? Одно рекомендуется над другим?
95
В чем разница между функциями AddRange и Concat в общем списке? Одно рекомендуется над другим?
У них совершенно разная семантика.
AddRange изменяет список, добавляя в него другие элементы.
Concat возвращает новую последовательность, содержащую список и другие элементы, без изменения списка.
Выберите тот, который имеет желаемую семантику.
Большая разница в том, что AddRange изменяет тот список, для которого он вызывается, тогда как Concat создает новый List. Следовательно, они используются по-разному.
Также Concat - это метод расширения, который применяется к любому IEnumerable и возвращает IEnumerable, который вам нужен .ToList () для создания нового списка.
Если вы хотите расширить содержимое существующего списка, используйте AddRange.
Если вы создаете новый список из двух источников IEnumerable, используйте Concat с .ToList. У этого есть то качество, что он не изменяет ни один из источников.
Если вам нужно только перечислить содержимое двух списков (или любого другого IEnumerable), просто используйте Concat каждый раз, это имеет то преимущество, что фактически не выделяется новая память для хранения единого списка.
источник
Я нашел эту интересную статью, в которой рассказывается о разнице между этими двумя структурами и сравнивается их производительность ...
Основная идея заключается в том, что AddRange намного быстрее, когда речь идет о коллекциях большого размера.
Вот ссылка
Надеюсь это поможет,
источник
Concat
иAddRange
сList<KeyValuePair<string, string>>
1000 элементов, сцепляются / добавляемых в 100 раз, иAddRange
был чрезвычайно быстрее. Результаты были следующие:AddRange
13 мс,Concat().ToList()
16 000 мс, аConcat
приIEnumerable
выполнении толькоToList
в конце: 2700 мс.