C# 与泛型集合不同的类型
我有一张物品清单C# 与泛型集合不同的类型,c#,linq,list,C#,Linq,List,我有一张物品清单 List<Animals> animals 或 //EqualityComparer是IEqualityComparer的通用实现 列表类型 =animals.Distinct(新的EqualityComparer((a,b)=>a.GetType()==b.GetType()); 但是我在编译这两个代码时遇到了麻烦。为什么选择many?标准选择应执行以下操作: List<Type> types = animals.Select(x => x.
List<Animals> animals
或
//EqualityComparer是IEqualityComparer的通用实现
列表类型
=animals.Distinct(新的EqualityComparer((a,b)=>a.GetType()==b.GetType());
但是我在编译这两个代码时遇到了麻烦。为什么
选择many
?标准选择应执行以下操作:
List<Type> types = animals.Select(x => x.GetType()).Distinct();
List types=animals.Select(x=>x.GetType()).Distinct();
为什么选择多个
?标准选择应执行以下操作:
List<Type> types = animals.Select(x => x.GetType()).Distinct();
List types=animals.Select(x=>x.GetType()).Distinct();
如果列表中的任何列表只包含键类型的元素,那么使用字典怎么样
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();
}
}
列表匹配列表;
if(dictOfTypes.TryGetValue(typeof(Dog),out matchingList))
{
var dogs=matchingList.Cast();
foreach(狗中的狗)
{
dog.FindBone();
}
}
如果列表中的任何列表只包含键类型的元素,那么使用字典怎么样
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();
}
}
列表匹配列表;
if(dictOfTypes.TryGetValue(typeof(Dog),out matchingList))
{
var dogs=matchingList.Cast();
foreach(狗中的狗)
{
dog.FindBone();
}
}
你能解释一下“这种想法”吗?恐怕这个伪代码还不够。你能试着解释一下“这种想法”吗?恐怕这个伪代码还不够。它需要:.ToList()
但是这个工作非常好,谢谢。它需要:.ToList()
但是这个工作非常好,谢谢。