【发布时间】:2012-04-14 18:11:22
【问题描述】:
很抱歉把两个问题合二为一,它们是相关的。
HashCodes 用于HashSets 等。据我了解,它们必须是唯一的,不能更改,并且将对象的任何配置表示为单个数字。
我的第一个问题是,对于我的对象,包含两个 Int16s a 和 b,我的 GetHashCode 返回类似 a * n + b 的东西是否安全,其中 n 是一个很大的数字,我想也许是 @ 987654327@?
另外,GetHashCode 似乎不灵活地专门返回 Int32 类型。
32bits可以存储,例如两个Int16s,一个unicode字符或者16个N、S、E、W罗盘方向,不多,甚至像一个小的几个节点图可能太多了.这是否代表 C# Hash 集合的限制?
【问题讨论】:
-
我会使用
(a << 16) | b,它恰好是独一无二的,并且没有复杂的数学运算 -
这不是唯一的,您忘记了符号扩展。 (a
标签: c# hash int gethashcode int32