来自通用集合的不同类型

时间:2013-04-22 12:31:15

标签: c# linq list

我有一个对象列表

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

但我无法解决其中任何一个问题。

2 个答案:

答案 0 :(得分:4)

为什么SelectMany?标准Select应该完成这项工作:

List<Type> types = animals.Select(x => x.GetType()).Distinct();

答案 1 :(得分: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();
    }
}