title: How does the default comparator work in C#?
body: <p>I'm using OrderBy for some sorting based on properties and I found the <a href="https://msdn.microsoft.com/en-us/library/azhsac5f.aspx" rel="noreferrer">documentation for the default comparer</a> but it didn't explain much to me.  If an object doesn't implement <code>System.IComparable&lt;T&gt;</code>, how does it generate a <code>Comparer&lt;T&gt;</code>?</p>
  
  <p>For instance, I'm currently sorting a list of objects based a property value of type <code>object</code>. They are numeric types underneath and the sorting works fine.  How does C#/Linq know how to sort the object?  Does it do some un-boxing into primitives? Does it do some hash checking?  How would that translate into greater than or less than?</p>
  
  <p>If they were a more complex type would this fail with an error or would OrderBy do nothing, or would it even sort in a way that made no sense?</p>