我看过很多关于从基类型中获取所有类型的问题,等等,但这不是我需要的。例如,我有抽象基类:
public abstract class BasePart
{
//whatever
}
我有一大堆来自它的课程。像...
public class HorizontalPanel : BasePart { //code }
public class VerticalPanel : BasePart { //code }
public class RainBoard : BasePart { //code }
等等。 我总是按基类列出它们:
List<BasePart> parts;
我使用类型转换和泛型来做任何我想要的事情。但是,我来到了需要过滤此列表的位置,我只希望其中提供类型信息。只有一次类型。例如,如果我的列表有三个HorizontalPanels和两个VerticalPanels,我想要的是List<Type>
只包含{HorizontalPanel, VerticalPanel}
。我想我可以在链式循环中弄乱对象本身以获得我想要的东西,但我很肯定C#有更好的方法来做到这一点。任何人吗?
答案 0 :(得分:4)
没有语言功能可以帮助您解决此问题。最简单的方法是使用LINQ,首先使用Select
获取所有类型并使用Distinct
parts.Select(x => x.GetType()).Distinct();
答案 1 :(得分:0)
您可以使用Object.GetType()
检索对象的类型并填充列表。
之后,由于您需要一个只包含每种类型的一个实例的列表,您可以在之前填充的列表中调用Enumerable.Distinct()
,并Enumerable.ToList()
将生成的可枚举转换为列表。< / p>
总而言之,代码将类似于:
List<Type> types = new List<Types>();
foreach (Base element in MyList){
types.add(element.GetType());
};
List<Type> unique_types = types.Distinct().ToList();
这将为您提供列表unique_types
,其中只填充MyList中存在的每种类型的一个实例。