0

オブジェクトのリストがあります

List<Animals> animals

私はType内部のすべての異なる動物animals(例: DogCatWalrus) にアクセスし、この種のアイデアを使用して別の一般的なコレクションに取得しようとしています:

List<Type> types 
    = animals.SelectMany<Animal, Type>(a => a.GetType()).Distinct<Type>();

また

// EqualityComparer<T> is a generic implementation of IEqualityComparer<T>
List<Type> types 
    = animals.Distinct<Animal>(new EqualityComparer<Animal>((a, b) => a.GetType() == b.GetType())); 

しかし、これらのいずれかをコンパイルするのに問題があります。

4

2 に答える 2

1

Dictionary<Type, List<Animal>>リスト内のリストにキータイプの要素のみが含まれている場合はどうですか?

var typeSpecficGroups = animals.GroupBy(animal => animal.GetType());
var dictOfTypes = typeSpecficGroups.ToDictionary(group => group.Key, group => group.ToList());

これで、辞書に特定の動物が含まれているかどうかを問い合わせて、対応する動物のリストを取得できます。欠点は、リスト内の各要素を具象型にキャストする必要があることです。

List<Animal> matchingList;

if (dictOfTypes.TryGetValue(typeof(Dog), out matchingList))
{
    var dogs = matchingList.Cast<Dog>();

    foreach (var dog in dogs)
    {
        dog.FindBone();
    }
}
于 2013-04-22T12:56:20.133 に答える