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

c#, c#-4.0, generics

Solution

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

Problem

``` 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>(); CA(v); } static void CA(C<A> v) { } } } ```

Original source