c# - GetHashCode 使用哪个哈希函数?

标签 c# hashtable hash

我假设 .NET 中的(通用)Dictionary 类在其键上使用 GetHashCode() 方法来生成哈希值。我有两个问题由此引出:

  1. 对象有一个可覆盖的 GetHashCode() 方法。对于用户定义 引用类型对象,此方法会根据 引用资料?例如如果我有一个 OneString 类,其中包含 只有一个 String 实例变量 - 将两个单独的实例 这个具有匹配字符串的类总是产生相同的哈希码? 或者是否需要覆盖 OneString 的 GetHashCode() 方法 实现这个功能?

  2. 推测在 String 类中实现的散列函数与在不同引用类型(例如 BitmapImage)中实现的散列函数不同。在最常见的类中实现的哈希函数是否公开可用?

最佳答案

没有。

object.GetHashCode() 仅根据该对象的身份返回一个值。
它不会为两个等价对象返回相同的值;它完全不知道对象的类型或含义。

表示值的类(例如 String)重写 GetHashCode() 以返回基于所表示值的哈希值。
使用的算法取决于类设计者; GetHashCode() 的编写方式与任何其他方法一样。
但是,每当 Equals() 返回 true 时,GetHashCode() 应该返回相等的值;如果您的类(class)不这样做,那就是错误的。

关于c# - GetHashCode 使用哪个哈希函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10807964/

相关文章:

perl - 理解推送到哈希和 ||=[] 构造。 (在boilerplate.t 中生成)

C++ 哈希链接函数

python - 多次散列相同的字符

Perl 合并哈希

java - 用于基本文件系统的数据结构

c++ - 函数的完美哈希函数生成器

c# - 在 WPF 应用程序中正确实现任务

c# - 使用 Ghostscript 从 PDF 裁剪页脚

C# SvnClient 获取授权用户名

c# - 路由参数的 XML 注释