В чем разница между функциями AddRange и Concat в общем списке? Одно рекомендуется над другим?
В чем разница между функциями 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 мс.