Возьмите следующее:
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
Почему хэш-код тот же?
Это удивительно и сделает использование делегатов в Dictionary
медленнее, чем List
(aka O(n)
для поиска).
Update:
Вопрос в том, почему. IOW, кто сделал такое (глупое) решение?
Лучшая реализация hashcode была бы:
return Method ^ Target == null ? 0 : Target.GetHashcode();
// where Method is IntPtr