10.了解GetHashCode()

1、对于引用类型,GetHashCode()函数返回当前对象的ID。(对象的ID在对象创建时自动分配)

2、对于值类型,GetHashCode()返回类型的第一个字段的散列值。

    public struct MyStruct
    {
     private string _msg;
     private int _id;
     private DateTime _epoch;
    }

    从  MyStruct      对象上返回的散列值是从该对象的   _msg                成员上生成的。下面的代码片断总是返回 true
    MyStruct s = new MyStruct( );
    return s.GetHashCode( ) == s._msg.GetHashCode( );

    概括一个默认的行为,Object.GetHashCode()可以正确的在引用类型上工作,尽管它不是必须保证一个高效
    的分布 。 如果你有一个对                 的   操作符的重载,你会破坏                          。
             (              Object  ==                       GetHashCode())  ValueType.GetHashCode()
    仅在你的结构的第一个字段是只读的时候才能正确工作。而当你的结构的第一个字段的值,复盖 了它所能
    接受 的输入 的有意义的子集时,ValueType.GetHashCode()就可以保证一个高效的散列值

 

 GetHashCode()具有很特殊的要求:相等的对象必须产生相等的散列值,并且散列值必须是对象不变的,并
    且是均衡的高效分布 。所有这些只有对恒定类型才能满足 译注 :本文前面已经说过了,                                                 框架中的
                                                             (                             .Net
                                其实并不满足均衡高效分布这一规则  。对于其它类型 ,就交给默认的行为
    System.Object.GetHashCode()                                     )
    吧,知道它的缺点就行了。

 

转载于:https://www.cnblogs.com/movemoon/archive/2012/10/23/2736103.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值