Obtendo O Código Hash De Uma String Do CLR .NET 1.1 Usando O CLR .NET 2.0
Todos sabemos (ou deveríamos saber) que os valores obtidos do método GetHashCode não devem ser persistidos para uso posterior, especialmente com strings, porque:
O comportamento de GetHashCode é dependente da sua implementação, que pode variar de uma versão do Common Language Runtime para para outra. A razão porque isto pode acontecer pode ser para melhorar a performance de GetHashCode. [^]
No entanto, código que persiste valores obtidos do método GetHashCode para uso posterior pode cair no nosso colo. E se for necessário actualizar o nosso código para, por exemplo, usar WCF ou WF, temos um problema.
A solução seria usar o Reflector para ver como isto é feito no CLR 1.1 e implementar o mesmo algoritmo no CLR 2.0.
Infelizmente, a implementação no 1.1 é em código nativo.
Hoje, graças à Nicole, encontrei a classe System.Collections.Specialized.BackCompatibleStringComparer no CLR 2.0. Esta classe implementa o algoritmo do String.GetHashCode do CLR 1.1 e pode ser encontrado nas assemblies System.dll e System.Windows.Forms.dll. Não podemos usá-lo porque é interno, mas podemos usar o Reflector para ver a sua implementação. Também pode ser encontrado aqui.
Agora tenho algumas questões: