获取一份清单 从抽象类继承的对象列表中的所有派生类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取一份清单 从抽象类继承的对象列表中的所有派生类型相关的知识,希望对你有一定的参考价值。
我已经看到了一些问题,涉及从基类型中获取所有类型等等,但这不是我需要的。例如,我有和抽象基类:
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#有更好的方法来做到这一点。任何人?
答案
没有语言功能可以帮助您解决此问题。最简单的方法是使用LINQ,首先使用Select
获取所有类型并使用Distinct
parts.Select(x => x.GetType()).Distinct();
另一答案
您可以使用Object.GetType()
检索对象的类型并填充列表。
之后,由于您需要一个仅包含每种类型的一个实例的列表,您可以在之前填充的列表中调用Enumerable.Distinct()
,并使用Enumerable.ToList()
将生成的可枚举转换为列表。
总而言之,代码将类似于:
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中存在的每种类型的一个实例。
以上是关于获取一份清单 从抽象类继承的对象列表中的所有派生类型的主要内容,如果未能解决你的问题,请参考以下文章