我是.NET的新手> 2
我有
List<Dog> dogs;
List<Cat> cats;
List<Animal> animals;
我需要在dogs
加入cats
和animals
。
我知道应该有一种优雅的方法来使用LINQ或.NET 4的东西来做,不是吗?
我的初始变体:
animals.AddRange(dogs);
animals.AddRange(cats);
答案 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。