C# generic & suspicious type check
<p>I have a problem understanding why <code>terrierPacks</code> in the following code is not recognized as a <code>Collection&lt;Pack&lt;Dog&gt;&gt;</code> ?</p>

<pre class="lang-cs prettyprint-override"><code>public class Dog
{
}

public class Terrier : Dog
{
}

public class Pack&lt;T&gt; where T: Dog
{
}

public class TerrierPack: Pack&lt;Terrier&gt;
{
}

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        var terrierPacks = new ObservableCollection&lt;TerrierPack&gt;();

        //This test is always wrong. Why ?
        if (terrierPacks is Collection&lt;Pack&lt;Dog&gt;&gt;)
            Console.WriteLine("True");
        else
            Console.WriteLine("False");
    }
}
</code></pre>

<p><strong>Clue:</strong> Visual Studio returns the following warning:</p>

<blockquote>
  <p>The given expression is never of the provided ('System.Collections.ObjectModel.Collection&lt; WpfApplication1.Pack&lt; WpfApplication1.Dog>>') type</p>
</blockquote>