[英]How could I iterate through list of abstract type, containing non-abstract types derived from that abstract class?
[英]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;
而且我使用類型轉換和泛型來對它們做任何我想做的事情。 但是,我到達需要過濾此列表的地步,並且只希望在其中使用類型信息 。 而且只有一次輸入。 例如,如果我的列表具有三個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
其中完全填充了unique_types
中每種類型的一個實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.