通用父集合拆分为子集合
本文关键字:子集合 拆分 集合 | 更新日期: 2023-09-27 18:03:10
我有一个IAnimal
的列表
List<IAnimal> Animals
在这个列表中我有3个不同的Animal
-
Cat
5对象 -
Dog
10对象 -
Cow
3对象
如何生成子Animal
类型的3个不同列表?
结果应为
-
List<Cat> Cats
包含5个对象 -
List<Dog> Dogs
包含10个对象 -
List<Cow> Cows
包含3个对象
我不介意使用不同的集合类型然后List
。IEnumerable
还是其他的?
LINQ让这个变得简单:
var cats = animals.OfType<Cat>().ToList();
var dogs = animals.OfType<Dog>().ToList();
var cows = animals.OfType<Cow>().ToList();
直接用Enumerable.OfType
怎么样?
根据指定的类型过滤IEnumerable中的元素。
Return Value
Type: System.Collections.Generic.IEnumerable<TResult>
An IEnumerable<T> that contains elements from the input sequence of type TResult.
var cat = animals.OfType<Cat>().ToList();
var cow = animals.OfType<Cow>().ToList();
var dog = animals.OfType<Dog>().ToList();
使用foreach
或LINQ
遍历列表并检查类型:
foreach(IAnimal animal in Animals){
if(animal is Cat)
Cats.Append(animal);
//do the same with dogs and cows
}