使用反射获取T的类型名

本文关键字:类型 获取 反射 | 更新日期: 2023-09-27 18:04:54

我有:

public class MyUserControl : WebUserControlBase <MyDocumentType>{...}

如果我在另一个类中,我如何获得MyDocumentType的TypeName ?

使用反射获取T的类型名

你可以这样写:

typeof(MyUserControl).BaseType.GetGenericArguments()[0]

如果您知道该类直接派生自WebUserControlBase<T>,则有很多答案显示如何获得T的类型。如果您希望能够在层次结构中向上移动,直到遇到WebUserControlBase<T>:

,可以这样做
var t = typeof(MyUserControl);
while (!t.IsGenericType
    || t.GetGenericTypeDefinition() != typeof(WebUserControlBase<>))
{
    t = t.BaseType;
}

然后通过反映t的泛型类型参数来得到T

由于这是一个示例而不是生产代码,因此我不处理t表示根本不派生自WebUserControlBase<T>的类型的情况。

您可以使用Type.GetGenericArguments方法。

返回一个Type对象数组,该数组表示的类型参数泛型类型或泛型类型定义的类型参数。

typeof(MyUserControl).BaseType.GetGenericArguments()[0]

由于此方法的返回类型为System.Type[],因此数组元素将按照它们在泛型类型的类型参数列表中出现的顺序返回。

如果你使用的是。net 4.5:

typeof(MyUserControl).BaseType.GenericTypeArguments.First();