[英]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 : BaseClass
的DerivedList
,這也將返回true。 但是,由於List
不是方差容忍的,因此它不適用於檢查對List<BaseClass>
可分配性
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.