Why do I get the following error? Invalid variance modifier. Only interface and delegate type parameters can be specified as variant

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;

namespace Variance

  class A { }

  class B : A { }

  class C<out T>  { }

class Program
    static void Main(string[] args)
        var v = new C<B>();


    static void CA(C<A> v) { }


This is the offending line:

class C<out T> 

As the error message tells you, you can’t apply generic variance to classes, only to interfaces and delegates. This would be okay:

interface C<out T>

The above is not.

For details, see Creating Variant Generic Interfaces

Source : Link , Question Author : Franck Jeannin , Answer Author : James Curran

Leave a Comment