获取从抽象类继承的对象列表中所有派生类型的 List<Type>

mak*_*chi 0 c# reflection inheritance

我见过很多关于从基本类型获取所有类型等的问题,但这并不是我所需要的。例如,我有一个抽象基类:

public abstract class BasePart
{
    //whatever 
}
Run Code Online (Sandbox Code Playgroud)

我有很多从它派生的类。喜欢...

public class HorizontalPanel : BasePart { //code }
public class VerticalPanel : BasePart { //code }
public class RainBoard : BasePart { //code }
Run Code Online (Sandbox Code Playgroud)

等等。我总是按基类列出它们:

List<BasePart> parts;
Run Code Online (Sandbox Code Playgroud)

我使用类型转换和泛型来做我想做的事情。然而,我需要过滤这个列表,并且我只想要其中可用的类型信息。并且只有一次用于类型。例如,如果我的列表有三个 Horizo​​ntalPanels 和两个 VerticalPanels,我想要从中得到的是List<Type>仅包含{HorizontalPanel, VerticalPanel}. 我想我可以在链式循环中摆弄对象本身以获得我想要的东西,但我确信 C# 有更好的方法来做到这一点。任何人?

Tit*_*mir 5

没有语言功能可以帮助您完成此操作。最简单的方法是使用 LINQ,首先使用Select获取所有类型并使用Distinct

parts.Select(x => x.GetType()).Distinct();
Run Code Online (Sandbox Code Playgroud)