Вы предполагаете, что байтовые массивы переопределяют Equals
и GetHashCode
для сравнения на равенство: они не делают. Они просто используют тест идентичности по умолчанию - поэтому без дополнительного назначения в конце вы просто проверяете, находится ли только что добавленный вами ключевой объект в словаре - что, конечно, так.
Одним из способов решения этой проблемы было бы сохранение обратимого строкового представления хеша (например, с использованием base64) вместо самого хеша. Или напишите свою собственную реализацию IEqualityComparer<byte[]>
и передайте ее конструктору Dictionary
, чтобы она использовала эту реализацию, чтобы найти хэш-код массивов байтов и сравнить их друг с другом.
Короче говоря: это не имеет ничего общего с MD5, и все, что связано с тем, что
Console.WriteLine(new byte[0].Equals(new byte[0]));
выведет False:)