C# generic constraints for IEnumerable
===

    public interface I {
    }
    public class A : I {
    }

в явном виде компилятор без проблем воспринимает IEnumerable&lt;A&gt; как IEnumerable&lt;I&gt; :

    public void Test() {
        IEnumerable<A> a = new List<A>();
        new List<I>().AddRange(a);
    }

но если использовать generic constraints, получаем:

    public void Test<T>() where T : I {
        IEnumerable<T> t = new List<T>();
        new List<I>().AddRange(t);
    }
                              ^^^
    Argument 1: cannot convert from 'IEnumerable<T>' to 'IEnumerable<I>'

но тем не мнее, естественно, компилируется

    public void Test<T>(T t) where T : I {
        new List<I>().Add(t);
    }


с чего возникает вопрос - это корректное поведение компилятора (если да, то почему?), либо баг?)
