Why does the is operator return false when given null?
<p>It seems to me that the <code>is</code> operator is a bit inconsistent.</p>

<pre><code>bool Test()
{
    // Returns false, but should return true.
    return null is string;
}
</code></pre>

<p>One expects that the <code>null</code> value belongs to any reference (or nullable) type. And indeed, the C# language specification says something which supports this hypothesis, for example (6.1.6 Implicit reference conversions):</p>

<blockquote>
  <p>The implicit reference conversions are: <br>
  ... <br>
  • From the null literal to any reference-type.</p>
</blockquote>

<p>The description (7.10.10 The is operator) of the <code>is</code> operator starts by saying that the expression <code>(E is T)</code> will result in true when a reference conversion from <code>E</code> to <code>T</code> exists, but then the authors go on by explicitly excluding the case when <code>E</code> is the <code>null</code> literal or has a <code>null</code> value.</p>

<p>Why do they do that? To me it seems counterintuitive.</p>
