Присвоить коллекцию производных классов базовой ошибке коллекции классов - PullRequest
1 голос
/ 08 июня 2011

У меня есть два класса

class Base
{

}
class Derived : Base
{

}

Base base = new Derived(); нет ошибки компиляции

если я сделаю ICollection<Base> collBase = new List<Derived>();, это выдаст ошибку компиляции. Есть ли другие альтернативы, чтобы решить эту проблему?

1 Ответ

4 голосов
/ 08 июня 2011

Если вы используете .Net версии 4: измените ICollection на IEnumerable

http://msdn.microsoft.com/en-us/library/dd799517.aspx

Редактировать - более полезное чтение

http://blogs.msdn.com/b/ericlippert/archive/2007/10/26/covariance-and-contravariance-in-c-part-five-interface-variance.aspx

http://blogs.msdn.com/b/ericlippert/archive/tags/covariance+and+contravariance/default.aspx

пытается уточнить, почему вы не можете сделать это:

class animal {}
class dog : animal {}
class cat : animal {}

ICollection<animal> dogs = new List<dog>(); //error (Or List<T>, same error) because...
dogs.Add(new cat()); //you just dogged a cat

IEnumerable<animal> dogs = new List<dog>(); // this is ok!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...