我有一个类Animal,和它的子类Dog。
我有一个List,我想把一些List的内容添加到List中。
除了将List转换为List然后使用AddRange之外,还有更好的方法吗?
如果您使用的是C#4,则不需要进行转换:
List<Animal> animals = new List<Animal>();
List<Dog> dogs = new List<Dog>();
animals.AddRange(dogs);
这是允许的,因为AddRange()
接受一个协变的IEnumerable<T>
。
如果您没有C#4,那么您将不得不迭代List<Dog>
并转换每个项,因为协变只是在那时添加的。您可以通过.Cast<T>
扩展方法完成此操作:
animals.AddRange(dogs.Cast<Animal>());
如果您没有C#3.5,那么您将需要手动进行类型转换。
我认为这取决于你使用的.NET版本。虽然我可能错了,但在.NET 4中,我认为你可以这样做:
animalList.AddRange(dogList);
animalList.AddRange(dogList.Select(x => (Animal)x));
你可以使用 Cast<T>()
//You must have using System.Linq;
List<Dog> dogs = new List<Dog> ();
List<Animal> animals = new List<Animal> ();
animals.AddRange (dogs.Cast<Animal> ());
编辑:如dlev所指出的那样,如果您运行框架4,则无需进行强制转换。