Object.GetHashCode()

主要功能:

GetHashCode函数用于快速生成一个与对象的值相对应的数字。

主要特点:

1:如果两个类型相同的对象表示相同的值,则哈希函数必须为两个对象返回相同的常数值。也

就是如果两个对象相等(由operator==定义),它们必须产生相同的散列码。

YY:同一个无论是漏小JJ的时候,还是上大学的时候,因该都只有一个正式名字。

2:为了获得最佳性能,哈希函数必须为所有输入生成随机分布。

YY:所有人的名字因该不同,但也允许重名。

3:不论对该对象进行什么样的更改,哈希函数都必须返回完全相同的值。

YY:无论你穿什么衣服换成什么发型,你的名字都必须是一样。

用处:

1:为一个基于散列(hash)的集合定义键的散列值,典型的集合为HashtableDictionary容器

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值