4

私はのリストを持っていますIAnimal

List<IAnimal> Animals

このリストの中に私は3つの異なるものがありますAnimal

  1. Cat5つのオブジェクト
  2. Dog10個のオブジェクト
  3. Cow3つのオブジェクト

Animalサブタイプの3つの異なるリストを生成するにはどうすればよいですか?

結果は次のようになります

  1. List<Cat> Cats5つのオブジェクトが含まれています
  2. List<Dog> Dogs10個のオブジェクトが含まれています
  3. List<Cow> Cows3つのオブジェクトが含まれています

その場合、別のコレクションタイプを使用してもかまいませんListIEnumerableまたは他の?

4

3 に答える 3

6

LINQ はこれを簡単にします。

var cats = animals.OfType<Cat>().ToList();
var dogs = animals.OfType<Dog>().ToList();
var cows = animals.OfType<Cow>().ToList();
于 2013-03-09T12:49:13.217 に答える
4

を使用するだけではどう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();
于 2013-03-09T12:49:52.953 に答える
0

foreachまたはを使用してリストを反復処理しLINQ、タイプを確認します。

 foreach(IAnimal animal in Animals){
  if(animal is Cat)
     Cats.Append(animal);
 //do the same with dogs and cows
 }
于 2013-03-09T12:49:39.650 に答える