GetHashCode Equals implementation for a class in C

De openkb
Aller à : Navigation, rechercher

Sommaire

Questions

I have a class Person for which I have to override the Equals and GetHashCode method. Two person objects are equals if the Name matches OR if the Email matches. What s a good way of doing this with a considerably efficient hash function?

class Person
{
    string Name
    string Email

    public override Equals(object obj)
    {
        if (ReferenceEquals(obj, null))
            return false;
        if (ReferenceEquals(this, obj))
            return true;
        if (obj is Person)
        {
            Person person = (Person)obj;
            return
                (this.Name == person.Name)
                || (this.Email == person.Email);
        }
        return false;
    }

    public override GetHashCode()
    {
        // What s a good way to implement?
    }
}

Answers

You can t, really. Well, not apart from returning a constant value.

Look at it this way... all people with email "x" have to have the same hash code, because they re equal. And all people with name "y" have to have the same hash code, and so it goes on:

Name    Email    Hash
  n1       e1      h1
  n2       e1      h1 (because emails are equal
  n2       e2      h1 (because names are equal to previous)

Note how we ve managed to change both the name and the email to arbitrary values, but the hash has to still be h1.

Source

License : cc by-sa 3.0

http://stackoverflow.com/questions/4128584/gethashcode-equals-implementation-for-a-class-in-c-sharp

Related

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Outils