Как преобразовать IEnumerable <SubClass>в IEnumerable <ParentClass> - PullRequest
1 голос
/ 02 августа 2010

Как мне перейти (бросить? Преобразовать?):

IEnumerable<Square>

до

IEnumerable<Shape>

Ответы [ 3 ]

4 голосов
/ 02 августа 2010

Если вы используете что-либо ниже, чем .NET 4.0, вам придется использовать IEnumerable.Cast :

IEnumerable<Square> squares = new List<Square>();

// Fill the collection

IEnumerable<Shape> shapes = squares.Cast<Shape>();

.NET 4.0 представляет новые функции Covariance и Contravariance, которые позволяют вам выполнять это приведение напрямую:

IEnumerable<Square> squares = new List<Square>();
IEnumerable<Shape> shapes = (IEnumerable<Shape>)squares;
1 голос
/ 02 августа 2010
var shapes = squares.Cast<Shape>();
0 голосов
/ 02 августа 2010

Если вы используете .NET 4.0, вам не нужно.

С Ковариация и Контравариантность в Обобщениях (выделение добавлено):

Полиморфизм позволяет вам назначать экземпляр Derived переменной типа Base.Аналогично, поскольку параметр типа интерфейса IEnumerable (T) является ковариантным, можно присвоить экземпляр IEnumerable<Derived> переменной типа IEnumerable<Base> ...

Поскольку вы задаете этот вопрос, я предполагаю, что вы еще не используете .NET 4.0.Но это может быть причиной для обновления, если вы можете.

...