Como converter List para List , quando Dog é uma subclass de Animal?

Eu tenho uma class Animal e sua subclass Dog . Eu tenho um List e eu quero adicionar o conteúdo de alguns List para o List . Existe uma maneira melhor de fazer isso, do que apenas lançar o List para uma List e usar o AddRange ?

Você não precisa do casting se estiver usando o C # 4:

 List animals = new List(); List dogs = new List(); animals.AddRange(dogs); 

Isso é permitido, porque AddRange() aceita um IEnumerable , que é covariant .

Se você não tiver o C # 4, você terá que iterar o List e converter cada item, já que a covariância foi adicionada somente então. Você pode fazer isso através do método de extensão .Cast :

 animals.AddRange(dogs.Cast()); 

Se você não tiver o C # 3.5, terá que fazer o casting manualmente.

Eu acredito que isso depende de qual versão do .net você está usando. Eu poderia estar enganado, mas no .net 4 eu acho que você pode fazer

 animalList.AddRange(dogList); 

Caso contrário, no .net 3.5, você pode fazer

 animalList.AddRange(dogList.Select(x => (Animal)x)); 

Você pode usar Cast ()

 //You must have using System.Linq; List dogs = new List (); List animals = new List (); animals.AddRange (dogs.Cast ()); 

EDIT: Como dlev aponta, se você executar o framework 4 você não precisa converter.