Возьмите следующее:
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