如何获取基类的generics类型参数?

我有三节课如下:

public class TestEntity { } public class BaseClass { } public class DerivedClass : BaseClass { } 

我已经在运行时使用reflection获取了DerivedClassSystem.Type对象。 如何使用reflection获取TestEntitySystem.Type对象?

谢谢。

我假设您的代码只是一个示例,并且您没有明确地知道DerivedClass

 var type = GetSomeType(); var innerType = type.BaseType.GetGenericArguments()[0]; 

请注意,此代码在运行时很容易失败,您应该validation您处理的类型是否符合您的预期:

 if(type.BaseType.IsGenericType && type.BaseType.GetGenericTypeDefinition() == typeof(BaseClass<>)) 

也可以有更深的inheritance树,因此需要一些具有上述条件的循环。

您可以使用BaseType属性。 以下代码对于inheritance的更改是有弹性的(例如,如果在中间添加另一个类):

 Type GetBaseType(Type type) { while (type.BaseType != null) { type = type.BaseType; if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(BaseClass<>)) { return type.GetGenericArguments()[0]; } } throw new InvalidOperationException("Base type was not found"); } // to use: GetBaseType(typeof(DerivedClass)) 
 var derivedType = typeof(DerivedClass); var baseClass = derivedType.BaseType; var genericType = baseClass.GetGenericArguments()[0]; 

它认为这应该工作:

 var firstGenericArgumentType = typeof(DerivedClass).BaseType.GetGenericArguments().FirstOrDefault(); 

要么

 var someObject = new DerivedClass(); var firstGenericArgumentType = someObject.GetType().BaseType.GetGenericArguments().FirstOrDefault();