如何使用基类比较泛型类型
本文关键字:泛型类型 比较 基类 何使用 | 更新日期: 2023-09-27 17:50:27
是否可以使用基类比较泛型类型?如:
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
, DerivedList : List<DerivedClass>
和DerivedClass : BaseClass
。然而,由于List
不是方差容忍,它将不能用于检查List<BaseClass>