0

我有一个对象列表

List<Animals> animals

我正在尝试访问Type内部的每个不同的动物animals(例如Dog, Cat, Walrus)并使用这种想法将其放入另一个通用集合中:

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

4

为什么SelectMany?标准Select应该做的工作:

List<Type> types = animals.Select(x => x.GetType()).Distinct();
于 2013-04-22T12:33:07.857 回答
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 回答