Предположим, у меня есть интерфейс и класс:
public interface ITree {}
public class Tree : ITree {}
Поскольку IEnumerable<T>
является ковариантным, строка кода ниже компилируется успешно:
IEnumerable<ITree> trees = new List<Tree>();
Но когда я помещаю его в общий метод:
public void Do<T>() where T : ITree
{
IEnumerable<ITree> trees = new List<T>();
}
Я получаю скомпилированную ошибку из компилятора:
Ошибка 1 Невозможно неявно преобразовать тип 'System.Collections.Generic.List' в 'System.Collections.Generic.IEnumerable'. Явное преобразование существует (вы пропускаете листинг?) D:\lab\Lab.General\Lab.General\Program.cs 83 40 Lab.General
Почему ковариация в этом случае не работает?