Qual é a diferença entre as funções AddRange e Concat em uma lista genérica? Um é recomendado sobre o outro?
Respostas:
Eles têm semânticas totalmente diferentes.
AddRange modifica a lista adicionando os outros itens a ela.
Concat retorna uma nova sequência contendo a lista e os outros itens, sem modificar a lista.
Escolha o que tiver a semântica desejada.
A grande diferença é que AddRange modifica aquela lista contra a qual é chamado, enquanto Concat cria uma nova lista. Portanto, eles têm usos diferentes.
Além disso, Concat é um método de extensão que se aplica a qualquer IEnumerable e retorna um IEnumerable. Você precisa de um .ToList () para resultar em uma nova List.
Se você quiser estender o conteúdo de uma lista existente, use AddRange.
Se você estiver criando uma nova lista de duas fontes IEnumerable, use Concat com .ToList. Isso tem a qualidade de não alterar nenhuma das fontes.
Se você precisar apenas enumerar o conteúdo de duas Listas (ou qualquer outro IEnumerable), basta usar Concat todas as vezes, isso tem a vantagem de não alocar de fato nova memória para manter a lista unificada.
Achei este artigo interessante falando sobre a diferença entre essas 2 estruturas e comparando seu desempenho ...
A ideia principal é que AddRange é muito mais rápido quando se trata de coleções de tamanho grande.
Aqui está o link
Espero que isto ajude,
Concat
e AddRange
com um List<KeyValuePair<string, string>>
com 1000 elementos, concatenado / adicionado 100 vezes, e AddRange
foi extremamente mais rápido. Os resultados foram os seguintes: AddRange
13 ms, Concat().ToList()
16.000 ms, e Concat
ao IEnumerable
fazer apenas o ToList
no final: 2.700 ms.