我有一个对象列表
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()));
但我无法解决其中任何一个问题。
答案 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();
}
}