通用父集合拆分为子集合

本文关键字:子集合 拆分 集合 | 更新日期: 2023-09-27 18:03:10

我有一个IAnimal的列表

List<IAnimal> Animals

在这个列表中我有3个不同的Animal

  1. Cat 5对象
  2. Dog 10对象
  3. Cow 3对象

如何生成子Animal类型的3个不同列表?

结果应为

  1. List<Cat> Cats包含5个对象
  2. List<Dog> Dogs包含10个对象
  3. List<Cow> Cows包含3个对象

我不介意使用不同的集合类型然后ListIEnumerable还是其他的?

通用父集合拆分为子集合

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();

使用foreachLINQ遍历列表并检查类型:

 foreach(IAnimal animal in Animals){
  if(animal is Cat)
     Cats.Append(animal);
 //do the same with dogs and cows
 }