Контейнер <ImplementerOfIInterface>не является контейнером <IInterface>. Почему бы и нет? - PullRequest
1 голос
/ 12 июня 2010

Почему бы DoesntWork() не работать ниже? Ошибка: Cannot implicitly convert type 'List' to 'IEnumerable'. An explicit conversion exists (are you missing a cast?). Я знаю, что это что-то общее с шаблонами / шаблонами, которые я не получаю, но List является IEnumerable, а Implementer является IInterface. Я не понимаю, почему это должно быть приведено (или действительно ли оно может быть).

public interface IInterface
{
    // ...
}

public class Implementer : IInterface
{
    // ...
}

IEnumerable<IInterface> DoesntWork()
{
    List<Implementer> result = new List<Implementer>();
    return result;
}

Ответы [ 2 ]

4 голосов
/ 12 июня 2010

Это имеет отношение к ковариации .Вот хороший блог post .Если вы не используете 4.0, вам придется составить список, используя метод System.Linq Cast .

2 голосов
/ 12 июня 2010

Это работает с Net 4.0: открытый интерфейс IEnumerable <<strong> out T>: IEnumerable out является контрвариантным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...