Type.GetType(string)使用"Generic <T>"语法?

GWB*_*GWB 3 c# asp.net generics reflection

我正在构建一个通用的ASP.NET服务器控件,它具有用于指定类型名称的属性.我正在使用控件生成器通过传递属性值来生成我的控件的通用版本Type.GetType(string).这非常有效.但是,如果我要指定的类型是通用的,我必须使用如下语法:

<gwb:GenericControl runat="server" 
    TypeName="System.Collections.Generic.List`1[System.String]" />
Run Code Online (Sandbox Code Playgroud)

我希望能够像这样输入:

<gwb:GenericControl runat="server"
    TypeName="System.Collections.Generic.List<System.String>" />
Run Code Online (Sandbox Code Playgroud)

我知道我可以手动解析尖括号的值并将它们转换为方括号,并添加相应的反引号数字前缀,但我想知道是否有任何内置方法来执行此转换?我假设Generic<T>语法是特定于C#(或至少在VB.NET中不同)所以我猜我还必须解析任何其他语言特定的语法.

我注意到ASP.NET MVC InheritsPage指令的属性中执行此操作,但我不确定如何.

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
    Inherits="System.Web.Mvc.ViewPage<MyModel>" %>
Run Code Online (Sandbox Code Playgroud)

Jar*_*Par 5

不,没有内置的方法来做到这一点.原因是类型名称Generic<T>确实特定于C#.实际上,它们在元数据中的写法不同.

简短的版本是它将是类型名称,后跟一个`,然后是一个与通用参数计数相对应的数字. Generic<T>例如,将被写为Generic`1,Generic<T1,T2>并将被写为Generic`2.数组为语法添加了一些复杂性,但这是一般规则.

当您使用Type.GetType时,您实际上在进行MetaData查询而不是C#查询.因此必须提供类型名称,因为它出现在MetaData中.