如何反映用于继承的泛型参数

tag*_*s2k 1 .net c# generics reflection inheritance

假设我有以下类层次结构:TaskViewer继承自的ListViewer<Task>继承自ViewerBase.

如果我调试到声明的方法ViewerBase并查看this.GetType(),它会正确返回TaskViewer.但是,我找不到一个属性或方法,它将返回继承中使用的泛型参数,即Task.显然,如果我是在上下文中TaskViewer,ListViewer<T>那么我会很容易地知道这一点.

我可以看到它是Task通过查看BaseType.FullName属性,但我已经通过列表,我没有看到任何东西标识自己使用该泛型参数.

我如何从根类中的此方法中获取原始泛型参数?

Dan*_*ner 6

您可以按如下方式访问基类型的泛型参数(假设只有一个类型参数).

typeof(TaskViewer).BaseType.GetGenericArguments()[0]
Run Code Online (Sandbox Code Playgroud)

ViewerBase你会使用

this.GetType().BaseType.GetGenericArguments()[0]
Run Code Online (Sandbox Code Playgroud)

但是看起来很容易看到基类中派生类的泛型类型参数.您无法知道实际类型是什么,因此如果它根本没有泛型参数则不会.你能告诉一下你的使用场景吗?