.NET List <T>Concat против AddRange - PullRequest
       33

.NET List <T>Concat против AddRange

76 голосов
/ 19 сентября 2008

В чем разница между функциями AddRange и Concat в общем списке? Рекомендуется ли один над другим?

Ответы [ 3 ]

104 голосов
/ 19 сентября 2008

У них совершенно другая семантика.

AddRange изменяет список, добавляя в него другие элементы.

Concat возвращает новую последовательность, содержащую список и другие элементы, без изменения списка.

Выберите ту семантику, которая вам нужна.

30 голосов
/ 19 сентября 2008

Большая разница в том, что AddRange изменяет список, для которого он вызывается, тогда как Concat создает новый список. Следовательно они имеют различное использование.

Также Concat - это метод расширения, который применяется к любому IEnumerable и возвращает IEnumerable, вам необходим .ToList (), чтобы получить новый список.

Если вы хотите расширить содержимое существующего списка, используйте AddRange.

Если вы создаете новый список из двух источников IEnumerable, используйте Concat с .ToList. Это качество, которое не мутирует ни в один из источников.

Если вам когда-либо нужно перечислить содержимое двух списков (или любого другого IEnumerable), то просто используйте Concat каждый раз, это имеет преимущество в том, что фактически не выделяет новую память для хранения объединенного списка.

3 голосов
/ 05 марта 2019

Я нашел эту интересную статью, рассказывающую о разнице между этими двумя структурами и сравнивающей их производительность ...

Основная идея заключается в том, что AddRange намного быстрее, когда речь идет о коллекциях большого размера.

Вот ссылка

Надеюсь, это поможет,

...