title: Why does the C# compiler translate this != comparison as if it were a > comparison?
body: <p>I have by pure chance discovered that the C# compiler turns this method:</p>
  
  <pre><code>static bool IsNotNull(object obj)
  {
      return obj != null;
  }
  </code></pre>
  
  <p>…into this <a href="http://en.wikipedia.org/wiki/Common_Intermediate_Language">CIL</a>:</p>
  
  <pre><code>.method private hidebysig static bool IsNotNull(object obj) cil managed
  {
      ldarg.0   // obj
      ldnull
      cgt.un
      ret
  }
  </code></pre>
  
  <p>…or, if you prefer looking at decompiled C# code:</p>
  
  <pre><code>static bool IsNotNull(object obj)
  {
      return obj &gt; null;   // (note: this is not a valid C# expression)
  }
  </code></pre>
  
  <p>How come that the <code>!=</code> gets translated as a "<code>&gt;</code>"?</p>