Рассмотрим следующий код:Почему Hashtable не возвращает true для «ContainsKey» для ключа байта типа [] в C#?
byte[] bytes = new byte[] { 1, 2, 5, 0, 6 };
byte[] another = new byte[] { 1, 2, 5, 0, 6 };
Hashtable ht = new Hashtable();
ht.Add(bytes, "hi");
Assert.IsTrue(ht.ContainsKey(another));
Почему это утверждение потерпеть неудачу? Если массив примитивного типа не должен использоваться с использованием ссылки на объект, не так ли? Так почему он должен возвращать ложные? Есть ли что-нибудь, что я могу сделать, чтобы эта хэш-таблица работала?
System.Array - это класс поддержки, который рассматривается здесь в MSDN как ссылочный тип http://msdn.microsoft.com/en-us/library/system.array(VS.80).aspx –
Предположим, что мы хэшировали эти два массива с одинаковым значением. Теперь предположим, что после кода выше вы добавили «bytes [0] = 100;». Теперь ht.Contains (bytes) возвращает true или false? Помните, что запросы выполняются * по хэш-значению *. Вот почему хеши выполняются по ссылке, а не по содержимому: * содержимое может меняться *. –