如何使用基类比较泛型类型

本文关键字:泛型类型 比较 基类 何使用 | 更新日期: 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>

的可分配性。