Created
June 29, 2022 19:39
-
-
Save Grave18/ef783cdd53dd86b75c65832b04e86e53 to your computer and use it in GitHub Desktop.
Equals(), GetHsshCode(), ==
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
namespace OverridingEquals | |
{ | |
public class PhoneNumber | |
{ | |
// First part of a phone number: (XXX) 000-0000 | |
public string AreaCode { get; set; } | |
// Second part of a phone number: (000) XXX-0000 | |
public string Exchange { get; set; } | |
// Third part of a phone number: (000) 000-XXXX | |
public string SubscriberNumber { get; set; } | |
public override bool Equals(object value) | |
{ | |
PhoneNumber number = value as PhoneNumber; | |
return !Object.ReferenceEquals(null, number) | |
&& String.Equals(AreaCode, number.AreaCode) | |
&& String.Equals(Exchange, number.Exchange) | |
&& String.Equals(SubscriberNumber, number.SubscriberNumber); | |
} | |
public override int GetHashCode() | |
{ | |
unchecked | |
{ | |
// Choose large primes to avoid hashing collisions | |
const int HashingBase = (int)2166136261; | |
const int HashingMultiplier = 16777619; | |
int hash = HashingBase; | |
hash = (hash * HashingMultiplier) ^ (!Object.ReferenceEquals(null, AreaCode) ? AreaCode.GetHashCode() : 0); | |
hash = (hash * HashingMultiplier) ^ (!Object.ReferenceEquals(null, Exchange) ? Exchange.GetHashCode() : 0); | |
hash = (hash * HashingMultiplier) ^ (!Object.ReferenceEquals(null, SubscriberNumber) ? SubscriberNumber.GetHashCode() : 0); | |
return hash; | |
} | |
} | |
public static bool operator ==(PhoneNumber numberA, PhoneNumber numberB) | |
{ | |
if (Object.ReferenceEquals(numberA, numberB)) | |
{ | |
return true; | |
} | |
if(Object.ReferenceEquals(null, numberA)) | |
{ | |
return false; | |
} | |
return (numberA.Equals(numberB)); | |
} | |
public static bool operator !=(PhoneNumber numberA, PhoneNumber numberB) | |
{ | |
return !(numberA == numberB); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment