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

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

Overview

Quer descobrir o segredo por trás da mesclagem eficaz de IEnumerables em C#? Neste post leve e direto, exploraremos como combinar facilmente duas variáveis usando a função Concat, abordando também as armadilhas comuns neste processo. Se você busca simplificar seu código e evitar dores de cabeça, junte-se a nós nesta exploração!

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