title: Why GetHashCode() matters?
body: <p>I am trying to understand what the <code>object.GetHashCode()</code> is used for. I read that it is used by collections to uniquely identify keys. But I wanted to test this and the result isn't what I expected.</p>
  
  <pre><code>struct Animal
  {
      public string Name { get; set; }
      public int Age { get; set; }
  
      public Animal(string name, int age) : this()
      {
          Name = name;
          Age = age;
      }
  
      public override int GetHashCode()
      {
          return Age.GetHashCode();
      }
  }
  
  object doggy = new Animal("Dog", 25);
  object cat = new Animal("Cat", 25);
  
  Hashtable table = new Hashtable();
  table.Add(doggy, "Dog");
  table.Add(cat, "Cat");
  
  Console.WriteLine("{0}", table[cat]);
  Console.WriteLine("{0}", table[doggy]);
  </code></pre>
  
  <p>I would have expected "Cat" would overwrite "Dog" or some kind of error telling me that the "key already exists" but the output is </p>
  
  <blockquote>
    <p>"Cat"
    "Dog"</p>
  </blockquote>