C# – 当Dog是Animal的子类时,如何将List 转换为List ?
我有一个类Animal
,它的子类Dog
。 我有一个List
,我想将一些List
的内容添加到List
。 有没有更好的方法,只需将List
转换为List
,然后使用AddRange
?
如果您使用C#4,则不需要演员:
List animals = new List (); List dogs = new List (); animals.AddRange(dogs);
这是允许的,因为AddRange()
接受一个IEnumerable
,它是协变的 。
但是,如果你没有C#4,那么你必须迭代List
并投射每个项目,因为只是添加了协方差。 您可以通过.Cast
扩展方法完成此操作:
animals.AddRange(dogs.Cast());
如果你甚至没有C#3.5,那么你将不得不手动进行投射。
我相信这取决于您使用的.Net版本。 我可能会弄错,但在.Net 4中,我认为你可以做到
animalList.AddRange(dogList);
否则在.Net 3.5中,你可以这样做
animalList.AddRange(dogList.Select(x => (Animal)x));
你可以使用Cast
//You must have using System.Linq; List dogs = new List (); List animals = new List (); animals.AddRange (dogs.Cast ());
编辑:正如dlev指出的那样,如果你运行框架4,则不需要强制转换。