title: Why does ToList<Interface> not work for value types?
body: <p>If I implement an interface for a value type and try to cast it to a List of it's interface type, why does this result in an error whereas the reference type converts just fine?</p>
  
  <p>This is the error:</p>
  
  <blockquote>
    <p>Cannot convert instance argument type
    <code>System.Collections.Generic.List&lt;MyValueType&gt;</code> to
    <code>System.Collections.Generic.IEnumerable&lt;MyInterfaceType&gt;</code></p>
  </blockquote>
  
  <p>I have to explicitely use the <code>Cast&lt;T&gt;</code> method to convert it, why?
  Since <code>IEnumerable</code> is a readonly enumeration through a collection, it doesn't make any sense to me that it cannot be cast directly.</p>
  
  <p>Here's example code to demonstrate the issue:</p>
  
  <pre><code>    public interface I{}
  
      public class T : I{}
  
      public struct V: I{}
  
      public void test()
      {
          var listT = new List&lt;T&gt;();
          var listV = new List&lt;V&gt;();
  
          var listIT = listT.ToList&lt;I&gt;();     //OK
          var listIV = listV.ToList&lt;I&gt;();     //FAILS to compile, why?
  
          var listIV2 = listV.Cast&lt;I&gt;().ToList(); //OK
  
      }
  </code></pre>