繁体   English   中英

C# 覆盖 GetHashCode 方法

[英]C# Overriding the GetHashCode method

示例中,发布者已覆盖获取 hash 代码方法。 我知道这样做是为了为返回的 object 提供更好的 hash 值,以减少碰撞次数,从而减少需要调用Equals()的次数。

我想知道的是,这个算法是如何计算的:

return 17 + 31 * CurrentState.GetHashCode() + 31 * Command.GetHashCode();

选择相关数字是否有特殊原因? 我可以简单地选择我自己的号码来输入吗?

一般来说,你应该选择素数。 这可以帮助您避免为不同的输入参数获得相同的哈希值。

素数通常用于哈希码计算以最小化冲突。 如果你在这个 iste 上搜索哈希码和素数,你会找到一些详细的解释(注意它是特定于语言的):

您通常希望使用素数(如上所述),因为它减少了冲突的机会(两个实例产生相同的结果)。 有关详细信息,请参阅: http://computinglife.wordpress.com/2008/11/20/why-do-hash-functions-use-prime-numbers/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM