public override int GetHashCode() { unchecked { var hashCode = (Name != null ? Name.GetHashCode() : 0); hashCode = (hashCode * 397) ^ (PublicKeyToken != null ? PublicKeyToken.GetHashCode() : 0); hashCode = (hashCode * 397) ^ (Culture != null ? Culture.GetHashCode() : 0); return(hashCode); } }
/// <summary> /// Returns a hash code for this instance. /// </summary> /// <returns> /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. /// </returns> public override int GetHashCode() { // As obtained from the Jon Skeet answer to: // http://stackoverflow.com/questions/263400/what-is-the-best-algorithm-for-an-overridden-system-object-gethashcode // And adapted towards the Modified Bernstein (shown here: http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx) // // Overflow is fine, just wrap unchecked { // Pick a random prime number int hash = 17; // Mash the hash together with yet another random prime number hash = (hash * 23) ^ Name.GetHashCode(); hash = (hash * 23) ^ Version.GetHashCode(); hash = (hash * 23) ^ Culture.GetHashCode(); if (PublicKeyToken != null) { hash = (hash * 23) ^ PublicKeyToken.GetHashCode(); } return(hash); } }