Vinicius Quaiato

{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}

Except() método para obter a diferença entre duas coleções


Fala galera, dando umas umas fuçadas no .NET achei o método [Except<

T&gt;
](http://msdn.microsoft.com/en-us/library/bb300779.aspx). Não é novidade do .NET 4, está presente no 3.5 SP1 se não me engano.Basicamente este método produz um novo set com as diferenças entre duas collections (dois IEnumerables).Imagine que você tem uma lista com valores, e uma outra lista com valores que você não quer. Para tirar estes valores da primeira, basta usar o Except. Confuso? Veja abaixo:
var cores = new List<string> { "azul", "amarelo", "verde", "rosa"}
;
var coresNaoOk = new List<string> { "rosa" }
;
var coresFinal = cores.Except(coresNaoOk).ToList();
    coresFinal.ForEach(c => Console.WriteLine(c));


    //azul//amarelo//verde</string></string>

Simples! Na linha 1 criamos uma lista com nomes de cores. Na linha 2 temos uma lista com as cores que não queremos. Na linha 4 removemos da lista de cores todas as cores não ok passando esta lista para o método Except na lista de cores.E na linha 6 estamos exibindo o resultado que pode ser conferido na figura abaixo:Resultado método Except

O método Except usa o Default EqualityComparer para fazer a comparação dos itens, no entanto você pode informar para o método um EqualityComparer para ser utilizado. Você pode fazer isso criando uma classe que implemente [IEqualityComparer<

T&gt;
](http://msdn.microsoft.com/pt-br/library/system.collections.iequalitycomparer(VS.90).aspx) ou implementando [IEquatable&lt;
T&gt;
](http://msdn.microsoft.com/pt-br/library/ms131187(VS.90).aspx) na sua classe.Tá aí a dica.

Att, Vinicius Quaiato.

Voltar

Fork me on GitHub