Извините, что объединяю два вопроса в один, они взаимосвязаны.
HashCode
s вместо HashSet
s и тому подобное. Насколько я понимаю, они должны быть уникальными, не меняться и представлять любую конфигурацию объекта в виде одного числа.
Мой первый вопрос заключается в том, что для моего объекта, содержащего два Int16 a
и b
, безопасно ли, чтобы мой GetHashCode
возвращал что-то вроде a * n + b
, где n - большое число, я думаю, возможно, Math.Pow(2, 16)
?
Также GetHashCode
, по-видимому, негибко возвращает именно тип Int32.
32 бита могут хранить, например, два Int16, один символ юникода или 16 направлений компаса N, S, E, W, это немного, даже что-то вроде небольшого графа с несколькими узлами, вероятно, было бы слишком много для этого. Представляет ли это ограничение коллекций C# Hash?
(a << 16) | b
, который уникален и не выполняет сложных математических операций. - person Marc Gravell   schedule 14.04.2012