簡體   English   中英

如何使用基類比較泛型類型

[英]How to compare generic types using a base class

是否可以使用基類比較泛型類型? 例如:

propertyInfo.PropertyType.IsSubclassOf(typeof(List<BaseClass>))

我想我可以執行以下操作,但是有更短的方法嗎?

Type type = propertyInfo.PropertyType;
type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>) && type.GetGenericArguments()[0].IsSubclassOf(typeof(BaseClass))

雖然您的解決方案是一種可能,但它不考慮目標是封閉的通用類型的子類的時間,例如NamedList : List<BaseClass>, IKeyedItemCollection<string, BaseClass> ,因為IsGenericType將返回false

但是,當您處理泛型的方差時,請考慮.IsAssignableFrom方法

typeof(IEnumerable<BaseClass>).IsAssignableFrom(PropertyInfo.PropertyType)

即使對於其中DerivedList : List<DerivedClass>DerivedClass : BaseClassDerivedList ,這也將返回true。 但是,由於List 不是方差容忍的,因此它不適用於檢查對List<BaseClass>可分配性

暫無
暫無

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

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