Assume I have interface and class:
public interface ITree {} public class Tree : ITree {}
As IEnumerable is covar
IEnumerable
That is because variance only works with reference types (classes, interfaces & delegates). Add a class constraint and it compiles just fine:
public static void Do<T>() where T : class, ITree