Mesclando/Concatenando dois objetos IEnumerable. (#dev, #csharp, #dotnet, #dotnetcore, #microsoft)

Mesclar dois ienumerables é bem simples, como vou demonstrar neste post, mas existem algumas pegadinhas no processo (que também explico aqui).

Indo direto ao assunto…

Mesclando os objetos

Para o exemplo abaixo, considere que você possui duas variáveis (first e second), ambas são do tipo IEnumerable e você quer mesclar as duas.

using System.Linq;

...

var merged = first.Concat(second);

 

Simples, né? A variável merged vai possuir, respectivamente, os valores de first e de second. Se voce precisar que os valores de second apareçam primeiro, deve usar a função concat na variável second, passando first como argumento.

Um ponto importante, para que isso funciona, é importante adicionar o statement using System.Linq.

 

Pontos de atenção

1: Cuidado com objetos que estão nulos.

Bom, este primeiro não é exatamente uma pegadinha, mas se uma das variáveis (first ou second, no nosso exemplo) estiverem nulas, será lançada uma exception do tipo ArgumentNullException.

 

2: Cuidado com o tipo de dado dos IEnumerable!

Para que esta fusão funcione corretamente, é importante que os dados das variáveis não mude. Isso por que a função Concat retorna um objeto que implementa IEnumerable e ele vai te retornar todos os objetos da primeira variável e depois todos os objetos da segunda variável, ou seja, ele nao cria um objeto com todos os elementos das variáveis envolvidas (o que seria estranho, considerando que estamos falando de IEnumerable).

Se é provável que estes dados possam mudar durante o período em que você esteja utilizando a variável, podem acontecer alguns comportamentos inesperados. Neste caso, talvez seja melhor utilizar a função ToList no resultado de Concat e trabalhar com uma lista que possui um snapshot daquele momento.

 

 

Espero ter ajudado!

 

Referência: https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.concat?view=netcore-3.1

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in .Net, Dev and tagged , , , , .