title: Why and how (internally) does Enum.IsDefined search for both name and value?
body: <p>Lets say we have defined <code>Planets</code> enum:</p>
  
  <pre><code>public enum Planets
  {
      Sun = 0,
      Mercury=5,          
      Venus,              
      Earth,          
      Jupiter,        
      Uranus,         
      Neptune   
  }
  </code></pre>
  
  <p>I was using <code>Enum.IsDefined</code> method for finding whether string exists in enum or not.</p>
  
  <pre><code>Enum.IsDefined(typeof(Planets), "Mercury"); // result is true
  </code></pre>
  
  <p>But, then I tried this and it returned true also:</p>
  
  <pre><code>Enum.IsDefined(typeof(Planets), 5); // result is true again
  </code></pre>
  
  <p>How, it comes? This method has not any overload. It has only one signature:</p>
  
  <pre><code>Enum.IsDefined(Type enumType, object value);
  </code></pre>
  
  <p>Why and how is <code>Enum.IsDefined</code> searching for both name and value? And it is really interesting to me, why did they chosed that way? IMO making overloads would be better choice, not?</p>