Почему два экземпляра делегата возвращают один и тот же хэш-код?

Возьмите следующее:

  var x =  new Action(() => { Console.Write("") ; });
  var y = new Action(() => { });
  var a = x.GetHashCode();
  var b = y.GetHashCode();
  Console.WriteLine(a == b);
  Console.WriteLine(x == y);

Будет напечатано:

True
False

Почему хэш-код такой же?

Это немного удивительно, и использование делегатов в Словаре будет таким же медленным, как Список (также известный как O (n) для поиска).

Обновление:

Вопрос почему. IOW, кто принял такое (глупое) решение?

Лучшая реализация хэш-кода была бы такой:

return Method ^ Target == null ? 0 : Target.GetHashcode();
// where Method is IntPtr
31
задан leppie 8 July 2011 в 12:18
поделиться