主要功能:
GetHashCode函数用于快速生成一个与对象的值相对应的数字。
主要特点:
1:如果两个类型相同的对象表示相同的值,则哈希函数必须为两个对象返回相同的常数值。也
就是如果两个对象相等(由operator==定义),它们必须产生相同的散列码。
YY:同一个无论是漏小JJ的时候,还是上大学的时候,因该都只有一个正式名字。
2:为了获得最佳性能,哈希函数必须为所有输入生成随机分布。
YY:所有人的名字因该不同,但也允许重名。
3:不论对该对象进行什么样的更改,哈希函数都必须返回完全相同的值。
YY:无论你穿什么衣服换成什么发型,你的名字都必须是一样。
用处:
1:为一个基于散列(hash)的集合定义键的散列值,典型的集合为Hashtable或Dictionary容器
2:配合GUID生成重复率低的随机数
Random r = new Random(Guid.NewGuid().GetHashCode());
double d = r.Next(1, 100);
忽悠:
Effective C#中文版,条款10:理解GetHashCode()方法的缺陷 ,此处解释的不对
默认情况下,ValueType.operator==()会比较结构中的第一个字段和其他每个字段。
public struct MyStruct
{
private string _msg;
private int _id;
private DateTime _epoch;
}
MyStruct对象返回的散列码实际等同于_msg字段的散列码。下面的代码将总是返回Ture:(此处错误)
for (int i = 0; i < 10; i++)
{
MyStruct s = new MyStruct();
s._msg = "test";
s._id = 1;
s._epoch = DateTime.Now;
System.Diagnostics.Debug.WriteLine(s.GetHashCode() ==s._msg.GetHashCode());
}
每次都false