将2个列表合并为一个

时间:2010-09-23 08:42:58

标签: .net .net-4.0

我是.NET的新手> 2

我有

List<Dog> dogs;
List<Cat> cats;
List<Animal> animals;

我需要在dogs加入catsanimals

我知道应该有一种优雅的方法来使用LINQ或.NET 4的东西来做,不是吗?

我的初始变体:

animals.AddRange(dogs);
animals.AddRange(cats);

1 个答案:

答案 0 :(得分:4)

.NET 4使用泛型协方差使这相对容易,是的 - 尽管你需要明确:

animals = dogs.Concat<Animal>(cats).ToList();

可替换地:

animals = dogs.Cast<Animal>().Concat(cats).ToList();

或:

IEnumerable<Animal> dogsAsAnimals = dogs;
animals = dogsAsAnimals.Concat(cats).ToList();

在.NET 4之前,您可以使用:

animals = dogs.Cast<Animal>().Concat(cats.Cast<Animal>()).ToList();

基本上与.NET 4的不同之处在于存在从IEnumerable<Cat>IEnumerable<Animal>的隐式转换。有关 lot 的详细信息,请参阅Eric Lippert's blog