Como obter o HashCode de uma Coleção (List), em .NET?


Hoje tive um pequeno problema para resolver e acabei percebendo algumas coisas interessantes. Eu precisei comparar se duas List<T> são iguais e percebi que não teria uma solução nativa para mim. Normalmente eu sobrescrevo oGetHashCode e crio meu Hash, mas neste caso é diferente.
Acabei criando uma solução que vale para qualquer List, veja só:
public static int GetHashCode<T>(this List<T> l)
{
int hash = 0;
foreach (T item in l)
{
hash ^= item.GetHashCode();
}
return hash;
}

É importante frizar: O tipo T tem que sobrescrever o GetHashCode, se não for umBuilt-in Type. Por exemplo:
public class Pessoa
{
int idade { get; set; }
string nome { get; set; }

public override int GetHashCode()
{
return idade ^ nome.GetHashCode();
}
}


List<Pessoa> pessoas = obterPessoas(); // Obtem 150 pessoas aleatórias
Int hash = pessoas.GetHashCode<Pessoa>();


Nenhum comentário:

Postar um comentário