簡體   English   中英

取得清單 <Type> 從抽象類繼承的對象列表中所有派生類型的類型

[英]Get a List<Type> of all derived types in a list of objects that inherit from an abstract class

我已經看到了很多有關從基本類型獲取所有類型的問題,等等,但這並不是我真正需要的。 例如,我有一個抽象基類:

public abstract class BasePart
{
    //whatever 
}

我有一堆衍生自它的類。 喜歡...

public class HorizontalPanel : BasePart { //code }
public class VerticalPanel : BasePart { //code }
public class RainBoard : BasePart { //code }

等等。 我總是按基類列出它們:

List<BasePart> parts;

而且我使用類型轉換和泛型來對它們做任何我想做的事情。 但是,我到達需要過濾此列表的地步,並且只希望在其中使用類型信息 而且只有一次輸入。 例如,如果我的列表具有三個Horizo​​ntalPanels和兩個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其中完全填充了unique_types中每種類型的一個實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM