标签:pre function null 可读性 void eth import gic shc
这里给出一种普遍的做法:
版本号1:
实现一个helper。传递类型T。返回这个类型的hashcode。函数逻辑非常直接,仅仅是做了null check而已。假设obj不为空,则直接使用obj的hash code。
public class HashHelper { private int _seed = 17; public int Hash<T>(T obj) { // why 31?// https://computinglife.wordpress.com/2008/11/20/why-do-hash-functions-use-prime-numbers/ // shortly, to reduce the conflict of hashing key‘s distrabution return 31 * _seed + ((obj == null) ?
-1 : obj.GetHashCode()); } }
public class HashFluent { private int _seed = 17; private int _hashContext; public HashFluent Hash<T>(T obj) { // why 31? // https://computinglife.wordpress.com/2008/11/20/why-do-hash-functions-use-prime-numbers/ // shortly, to reduce the conflict of hashing key‘s distrabution _hashContext = 31 * _seed + ((obj == null) ? -1 : obj.GetHashCode()); return this; } public HashFluent Hash(int? value) { _hashContext = 31 * _seed + ((value == null) ? -1 : value.GetHashCode()); return this; } public HashFluent Hash(IEnumerable sequence) { if (sequence == null) { _hashContext = 31 * _hashContext + -1; } else { foreach (var element in sequence) { _hashContext = 31 * _hashContext + ((element == null) ?-1 : element.GetHashCode()); } } return this; } public override int GetHashCode (){ return _hashContext; } // add more overridings here .. // add value types overridings to avoid boxing which is important }
标签:pre function null 可读性 void eth import gic shc
原文地址:http://www.cnblogs.com/tlnshuju/p/6914337.html