通过


Type.GetType 方法

定义

获取表示 Type 指定类型的对象。

重载

名称 说明
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)

获取具有指定名称的类型,指定是否执行区分大小写的搜索,以及是否在找不到类型时引发异常,还可以选择提供自定义方法来解析程序集和类型。

GetType()

获取当前 Type

GetType(String)

获取 Type 具有指定名称的、执行区分大小写的搜索。

GetType(String, Boolean)

获取 Type 具有指定名称的指定名称,执行区分大小写的搜索,并指定在找不到类型时是否引发异常。

GetType(String, Boolean, Boolean)

获取 Type 具有指定名称的指定名称,指定在找不到类型时是否引发异常,以及是否执行区分大小写的搜索。

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)

获取具有指定名称的类型,可以选择提供用于解析程序集和类型的自定义方法。

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)

获取具有指定名称的类型,指定在找不到类型时是否引发异常,并选择性地提供自定义方法来解析程序集和类型。

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)

Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs

获取具有指定名称的类型,指定是否执行区分大小写的搜索,以及是否在找不到类型时引发异常,还可以选择提供自定义方法来解析程序集和类型。

public:
 static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError, bool ignoreCase);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError, bool ignoreCase);
public static Type GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError, bool ignoreCase);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError, bool ignoreCase);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean, ignoreCase As Boolean) As Type

参数

typeName
String

要获取的类型的名称。 如果提供了参数 typeResolver ,则类型名称可以是能够解析的任何字符串 typeResolverassemblyResolver如果提供了参数,或者如果使用标准类型解析,typeName则必须是程序集限定的名称(请参阅AssemblyQualifiedName),除非该类型位于当前正在执行的程序集或 mscorlib.dll/System.Private.CoreLib.dll中,在这种情况下,它足以提供其命名空间限定的类型名称。

assemblyResolver
Func<AssemblyName,Assembly>

一个查找并返回在 中指定的 程序集的方法。 程序集名称作为assemblyResolverAssemblyName对象传递给。 如果未 typeName 包含程序集的名称, assemblyResolver 则不调用。 如果未 assemblyResolver 提供,则执行标准程序集解析。

警告:不要从未知或不受信任的调用方传递方法。 这样做可能会导致恶意代码特权提升。 仅使用你提供或熟悉的方法。

typeResolver
Func<Assembly,String,Boolean,Type>

一个方法,它查找并返回由 typeName 由标准程序集解析返回 assemblyResolver 的程序集中指定的类型。 如果未提供程序集,则该方法可以提供一个程序集。 该方法还采用一个参数,指定是否执行不区分大小写的搜索; ignoreCase 值传递给该参数。

警告:不要从未知或不受信任的调用方传递方法。

throwOnError
Boolean

true 如果找不到类型,则引发异常; falsenull返回 。 指定 false 还会禁止其他一些异常条件,但并非所有异常条件。 请参阅“异常”部分。

ignoreCase
Boolean

true 若要执行不区分大小写的搜索 typeNamefalse 则执行区分大小写的 typeName搜索。

返回

具有指定名称的类型。 如果未找到类型,则 throwOnError 参数指定是 null 返回还是引发异常。 在某些情况下,无论值如何 throwOnError,都会引发异常。 请参阅“异常”部分。

属性

例外

typeNamenull

调用类初始值设定项并引发异常。

throwOnErrortrue 且找不到类型。

-或-

throwOnError typeName包含true无效字符,例如嵌入的选项卡。

-或-

throwOnErrortruetypeName 字符串。

-或-

throwOnError表示truetypeName大小无效的数组类型。

-或-

typeName表示一个数组。TypedReference

当分析为类型名称和程序集名称时 typeName (例如,当简单类型名称包含一个未转义的特殊字符时),将发生错误。

-或-

throwOnErrortruetypeName 包含无效的语法(例如,“MyType[,*,]”)。

-或-

typeName 表示具有指针类型、 ByRef 类型或 Void 作为其类型参数之一的泛型类型。

-或-

typeName 表示具有错误数量的类型参数的泛型类型。

-或-

typeName 表示泛型类型,其类型参数之一不满足相应类型参数的约束。

throwOnErrortrue 并且找不到程序集或其依赖项之一。

找到程序集或其依赖项之一,但无法加载。

-或-

typeName 包含无效的程序集名称。

-或-

typeName 是没有类型名称的有效程序集名称。

程序集或其依赖项之一不是当前加载的运行时的有效程序集。

注解

在 .NET Core 3.0 及更高版本中,如果 assemblyResolver 为 null,则此 API 触发的程序集加载受当前值 AssemblyLoadContext.CurrentContextualReflectionContext的影响。

有关此 API 的详细信息,请参阅 Type.GetType 的补充 API 备注

适用于

GetType()

Source:
Type.cs
Source:
Type.cs
Source:
Type.cs
Source:
Type.cs
Source:
Type.cs

获取当前 Type

public:
 Type ^ GetType();
public:
 virtual Type ^ GetType();
public Type GetType();
override this.GetType : unit -> Type
Public Function GetType () As Type

返回

当前 Type

实现

例外

调用类初始值设定项并引发异常。

另请参阅

适用于

GetType(String)

Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs

获取 Type 具有指定名称的、执行区分大小写的搜索。

public:
 static Type ^ GetType(System::String ^ typeName);
public static Type GetType(string typeName);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName);
public static Type? GetType(string typeName);
static member GetType : string -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string -> Type
Public Shared Function GetType (typeName As String) As Type

参数

typeName
String

要获取的类型的程序集限定名称。 请参阅 AssemblyQualifiedName。 如果类型位于当前正在执行的程序集或 mscorlib.dll/System.Private.CoreLib.dll中,则足以提供其命名空间限定的类型名称。

返回

找到具有指定名称的类型;否则,为 null.

属性

例外

typeNamenull

调用类初始值设定项并引发异常。

typeName 表示具有指针类型、 ByRef 类型或 Void 作为其类型参数之一的泛型类型。

-或-

typeName 表示具有错误数量的类型参数的泛型类型。

-或-

typeName 表示泛型类型,其类型参数之一不满足相应类型参数的约束。

typeName 表示无效类型,例如,一个数组 TypedReference

找到程序集或其依赖项之一,但无法加载。

注意:在 适用于 Windows 应用商店应用的 .NET可移植类库中IOException请改为捕获基类异常。

程序集对当前加载的运行时无效。

示例

下面的示例检索 System.Int32 类型并使用该类型对象显示 FullName 其属性 System.Int32

using System;

class Example
{
     public static void Main()
     {
         try {
             // Get the type of a specified class.
             Type myType1 = Type.GetType("System.Int32");
             Console.WriteLine("The full name is {0}.\n", myType1.FullName);
         }
         catch (TypeLoadException e)
         {
            Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
         }

         try {
             // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
             Type myType2 = Type.GetType("NoneSuch", true);
             Console.WriteLine("The full name is {0}.", myType2.FullName);
         }
         catch(TypeLoadException e) {
            Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
         }
     }
}
// The example displays the following output:
//       The full name is System.Int32.
//
//       TypeLoadException: Unable to load type NoneSuch
open System

try
    // Get the type of a specified class.
    let myType1 = Type.GetType "System.Int32"
    printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
    printfn $"{e.GetType().Name}: Unable to load type System.Int32"

try
    // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
    let myType2 = Type.GetType("NoneSuch", true)
    printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
    printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
//       The full name is System.Int32.
//
//       TypeLoadException: Unable to load type NoneSuch
Class Example
     Public Shared Sub Main()
         Try
             ' Get the type of the specified class.
             Dim myType1 As Type = Type.GetType("System.Int32")
             Console.WriteLine("The full name is {0}.", myType1.FullName)
         Catch e As TypeLoadException
             Console.WriteLine("{0}: Unable to load type System.Int32",
                               e.GetType().Name)
         End Try

         Console.WriteLine()

         Try
             ' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
             Dim myType2 As Type = Type.GetType("NoneSuch", True)
             Console.WriteLine("The full name is {0}.", myType2.FullName)
         Catch e As TypeLoadException
             Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
         End Try
     End Sub
End Class
' The example displays the following output:
'       The full name is System.Int32.
'
'       TypeLoadException: Unable to load type NoneSuch

注解

如果知道其程序集限定名称,则可以使用 GetType 该方法获取另一 Type 个程序集中的类型的对象,该名称可从中 AssemblyQualifiedName获取。 GetType 导致加载在 . 中指定的 typeName程序集。 还可以使用 Assembly.Load 该方法加载程序集,然后使用 Assembly.GetTypeAssembly.GetTypes 方法获取 Type 对象。 如果类型在编译时在程序已知的程序集中,则使用 C# 或 GetType Visual Basic 中的运算符会更高效typeof

注释

如果 typeName 找不到,则对方法的 GetType(String) 调用将 null返回 。 它不会引发异常。 若要控制是否引发异常,请调用具有throwOnError参数的方法的GetType重载。

仅限 .NET Framework: GetType 仅适用于从磁盘加载的程序集。 如果调用 GetType 查找使用 System.Reflection.Emit 服务定义的动态程序集中定义的类型,则可能会出现不一致的行为。 此行为取决于动态程序集是永久性的,即使用RunAndSaveSave枚举的访问模式System.Reflection.Emit.AssemblyBuilderAccess创建的。 如果动态程序集是永久性的并且以前已写入磁盘 GetType ,则加载程序会在磁盘上查找保存的程序集,加载该程序集,并从该程序集检索类型。 如果在调用时 GetType 程序集尚未保存到磁盘,该方法将 null返回。 GetType 不了解暂时性动态程序集;因此,调用 GetType 以检索暂时性动态程序集中的类型将 null返回。

在 .NET Framework 中,若要在 GetType 动态模块上使用,在保存之前订阅 AppDomain.AssemblyResolve 事件和调用 GetType 。 否则,将在内存中获取程序集的两个副本。

在 .NET Core 3.0 及更高版本中,此 API 触发的程序集加载受当前值 AssemblyLoadContext.CurrentContextualReflectionContext的影响。

下表显示了通过 Get 方法在反射类型时返回的基类成员。

成员类型 Static 非静态
构造函数
领域 是的。 字段始终是按名称和签名隐藏的。
事件 不適用 常见的类型系统规则是继承与实现属性的方法相同。 反射将属性视为按名称和签名隐藏。 请参阅下面的说明 2。
方法 是的。 方法(虚拟和非虚拟)可以按名称隐藏或按名称和签名隐藏。
嵌套类型
财产 不適用 常见的类型系统规则是继承与实现属性的方法相同。 反射将属性视为按名称和签名隐藏。 请参阅下面的说明 2。
  1. 按名称和签名隐藏会考虑签名的所有部分,包括自定义修饰符、返回类型、参数类型、sentinel 和非托管调用约定。 这是二进制比较。

  2. 对于反射,属性和事件通过名称和签名进行隐藏。 如果基类中同时具有 get 和 set 访问器的属性,但派生类只有 get 访问器,则派生类属性将隐藏基类属性,并且无法访问基类上的 setter。

  3. 自定义属性不是常见类型系统的一部分。

除非数组或 COM 类型已加载到可用类的表中,否则不会搜索它们。

typeName 可以是由其命名空间限定的类型名称,也可以是包含程序集名称规范的程序集限定名称。 请参阅 AssemblyQualifiedName

如果 typeName 包含命名空间而不是程序集名称,则此方法按该顺序仅搜索调用对象的程序集并 mscorlib.dll/System.Private.CoreLib.dll。 如果使用部分或完整的程序集名称完全限定 typeName,此方法将在指定的程序集中搜索。 如果程序集具有强名称,则需要完整的程序集名称。

AssemblyQualifiedName 属性返回完全限定的类型名称,包括嵌套类型、程序集名称和泛型类型参数。 支持公共语言运行时的所有编译器都将发出嵌套类的简单名称,并且反射会根据以下约定在查询时构造一个混乱的名称。

注释

处理器体系结构是程序集标识的一部分,可以指定为程序集名称字符串的一部分。 例如,“ProcessorArchitecture=msil”。 但是,出于兼容性原因,它不包含在属性返回的 AssemblyQualifiedName 字符串中。 还可以通过创建对象 AssemblyName 并将其传递给方法的适当 Load 重载来加载类型。 然后,可以使用该方法 Assembly.GetType 从程序集加载类型。 另请参阅 AssemblyName.ProcessorArchitecture

分隔符 含义
反斜杠 (\) 转义字符。
反杆 (') 位于泛型类型名称末尾的一个或多个表示类型参数数的数字之前。
方括号 ([]) 为构造的泛型类型将泛型类型参数列表括起来;在类型参数列表中,将程序集限定的类型括起来。
逗号 (,) 在程序集名称之前。
句点 (.) 表示命名空间标识符。
加号 (+) 在嵌套类之前。

例如,类的完全限定名称可能如下所示:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

如果命名空间为 TopNamespace.Sub+Namespace,则字符串必须位于加号(+)前面,并带有转义字符(\),以防止将其解释为嵌套分隔符。 反射发出此字符串,如下所示:

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

“++”变为“\++”,“\”变为“\\”。

此限定名称可以持久保存,稍后用于加载 Type。 若要搜索和加载 a Type,请仅对类型名称或程序集限定类型名称使用 GetTypeGetType 类型名称仅查找 Type 调用方程序集,然后在系统程序集中查找。 GetType 具有程序集限定类型名称的程序集将查找 Type 任何程序集。

类型名称可能包括表示有关类型的其他信息的尾随字符,例如类型是引用类型、指针类型还是数组类型。 若要检索没有这些尾随字符的类型名称,请使用 t.GetElementType().ToString(),其中的类型 t

空格与除程序集名称以外的所有类型名称组件相关。 在程序集名称中,“”分隔符之前的空格是相关的,但“,分隔符后面的空格将被忽略。

泛型类型的名称以反杆(')结尾,后跟表示泛型类型参数数的数字。 此名称管理的目的是允许编译器支持具有相同名称但类型参数数量不同的泛型类型,同时发生在同一范围内。 例如,反射从泛型方法和 Visual Basic 或 Visual C# 中返回已管理的名称Tuple`1Tuple`2Tuple<T0, T1>泛型方法Tuple(Of T)Tuple(Of T0, T1)Tuple<T>

对于泛型类型,类型参数列表括在括号中,类型参数用逗号分隔。 例如,泛型 Dictionary<TKey,TValue> 具有两个类型参数。 类型键的String一个Dictionary<TKey,TValue>MyType可能如下所示:

System.Collections.Generic.Dictionary`2[System.String,MyType]

若要在类型参数列表中指定程序集限定类型,请将程序集限定的类型括在括号内。 否则,分隔程序集限定名称部分的逗号将解释为分隔其他类型参数。 例如,一个 Dictionary<TKey,TValue>MyType fromMyAssembly.dll,其类型 String为键,可能按如下所示指定:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

注释

仅当程序集限定类型出现在类型参数列表中时,才能将其括在括号中。 在类型参数列表中搜索限定和未限定类型的程序集的规则与限定和非限定的非泛型类型的规则相同。

可为 Null 的类型是泛型类型的特殊情况。 例如,可为 Int32 null 值由字符串“System.Nullable'1[System.Int32]”表示。

注释

还可以使用类型运算符获取可为 null 的类型。 例如,可通过 C# 和 GetType(Nullable(Of Boolean)) Visual Basic 返回typeof(Nullable<bool>)可为 Boolean null 的类型。

下表显示了用于 GetType 各种类型的语法。

获取 使用
可为 null Int32 Type.GetType("System.Nullable`1[System.Int32]")
指向的非托管指针 MyType Type.GetType("MyType*")
指向指向的指针的非托管指针 MyType Type.GetType("MyType**")
托管指针或对 MyType Type.GetType("MyType&")。 请注意,与指针不同,引用限制为一个级别。
父类和嵌套类 Type.GetType("MyParentClass+MyNestedClass")
一维数组,下限为 0 Type.GetType("MyType[]")
具有未知下限的一维数组 Type.GetType("MyType[*]")
n 维数组 括号内的逗号 (,)共 n-1 次。 例如, System.Object[,,] 表示三维 Object 数组。
一维数组的数组 Type.GetType("MyType[][]")
具有未知下限的矩形二维数组 Type.GetType("MyType[,]")
具有一个类型参数的泛型类型 Type.GetType("MyGenericType`1[MyType]")
具有两个类型参数的泛型类型 Type.GetType("MyGenericType`2[MyType,AnotherType]")
具有两个程序集限定的类型参数的泛型类型 Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
具有程序集限定类型参数的程序集限定泛型类型 Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")
一种泛型类型,其类型参数是具有两个类型参数的泛型类型 Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")

另请参阅

适用于

GetType(String, Boolean)

Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs

获取 Type 具有指定名称的指定名称,执行区分大小写的搜索,并指定在找不到类型时是否引发异常。

public:
 static Type ^ GetType(System::String ^ typeName, bool throwOnError);
public static Type GetType(string typeName, bool throwOnError);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, bool throwOnError);
public static Type? GetType(string typeName, bool throwOnError);
static member GetType : string * bool -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean) As Type

参数

typeName
String

要获取的类型的程序集限定名称。 请参阅 AssemblyQualifiedName。 如果类型位于当前正在执行的程序集或 mscorlib.dll/System.Private.CoreLib.dll中,则足以提供其命名空间限定的类型名称。

throwOnError
Boolean

true 如果找不到类型,则引发异常; falsenull返回 。 指定 false 还会禁止其他一些异常条件,但并非所有异常条件。 请参阅“异常”部分。

返回

具有指定名称的类型。 如果未找到类型,则 throwOnError 参数指定是 null 返回还是引发异常。 在某些情况下,无论值如何 throwOnError,都会引发异常。 请参阅“异常”部分。

属性

例外

typeNamenull

调用类初始值设定项并引发异常。

throwOnErrortrue 且找不到类型。

-或-

throwOnError typeName包含true无效字符,例如嵌入的选项卡。

-或-

throwOnErrortruetypeName 字符串。

-或-

throwOnError表示truetypeName大小无效的数组类型。

-或-

typeName表示一个数组。TypedReference

throwOnErrortruetypeName 包含无效语法。 例如,“MyType[,*,]”。

-或-

typeName 表示具有指针类型、 ByRef 类型或 Void 作为其类型参数之一的泛型类型。

-或-

typeName 表示具有错误数量的类型参数的泛型类型。

-或-

typeName 表示泛型类型,其类型参数之一不满足相应类型参数的约束。

throwOnErrortrue 并且找不到程序集或其依赖项之一。

找到程序集或其依赖项之一,但无法加载。

注意:在 适用于 Windows 应用商店应用的 .NET可移植类库中IOException请改为捕获基类异常。

程序集或其依赖项之一对当前加载的运行时无效。

示例

下面的示例检索 System.Int32 类型并使用该类型对象显示 FullName 其属性 System.Int32。 如果类型对象引用不存在的程序集,此示例将引发异常。

using System;

class Example
{
     public static void Main()
     {
         try {
             // Get the type of a specified class.
             Type myType1 = Type.GetType("System.Int32");
             Console.WriteLine("The full name is {0}.\n", myType1.FullName);
         }
         catch (TypeLoadException e)
         {
            Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
         }

         try {
             // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
             Type myType2 = Type.GetType("NoneSuch", true);
             Console.WriteLine("The full name is {0}.", myType2.FullName);
         }
         catch(TypeLoadException e) {
            Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
         }
     }
}
// The example displays the following output:
//       The full name is System.Int32.
//
//       TypeLoadException: Unable to load type NoneSuch
open System

try
    // Get the type of a specified class.
    let myType1 = Type.GetType "System.Int32"
    printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
    printfn $"{e.GetType().Name}: Unable to load type System.Int32"

try
    // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
    let myType2 = Type.GetType("NoneSuch", true)
    printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
    printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
//       The full name is System.Int32.
//
//       TypeLoadException: Unable to load type NoneSuch
Class Example
     Public Shared Sub Main()
         Try
             ' Get the type of the specified class.
             Dim myType1 As Type = Type.GetType("System.Int32")
             Console.WriteLine("The full name is {0}.", myType1.FullName)
         Catch e As TypeLoadException
             Console.WriteLine("{0}: Unable to load type System.Int32",
                               e.GetType().Name)
         End Try

         Console.WriteLine()

         Try
             ' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
             Dim myType2 As Type = Type.GetType("NoneSuch", True)
             Console.WriteLine("The full name is {0}.", myType2.FullName)
         Catch e As TypeLoadException
             Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
         End Try
     End Sub
End Class
' The example displays the following output:
'       The full name is System.Int32.
'
'       TypeLoadException: Unable to load type NoneSuch

注解

如果知道其程序集限定名称,则可以使用 GetType 该方法获取另一 Type 个程序集中的类型的对象,该名称可从中 AssemblyQualifiedName获取。 GetType 导致加载在 . 中指定的 typeName程序集。 还可以使用 Assembly.Load 该方法加载程序集,然后使用 Assembly.GetTypeAssembly.GetTypes 方法获取 Type 对象。 如果类型在编译时在程序已知的程序集中,则使用 C# 或 GetType Visual Basic 中的运算符会更高效typeof

仅限 .NET Framework: GetType 仅适用于从磁盘加载的程序集。 如果调用 GetType 查找使用 System.Reflection.Emit 服务定义的动态程序集中定义的类型,则可能会出现不一致的行为。 此行为取决于动态程序集是永久性的,即使用RunAndSaveSave枚举的访问模式System.Reflection.Emit.AssemblyBuilderAccess创建的。 如果动态程序集是永久性的并且以前已写入磁盘 GetType ,则加载程序会在磁盘上查找保存的程序集,加载该程序集,并从该程序集检索类型。 如果在调用时 GetType 程序集尚未保存到磁盘,该方法将 null返回。 GetType 不了解暂时性动态程序集;因此,调用 GetType 以检索暂时性动态程序集中的类型将 null返回。

在 .NET Framework 中,若要在 GetType 动态模块上使用,在保存之前订阅 AppDomain.AssemblyResolve 事件和调用 GetType 。 否则,将在内存中获取程序集的两个副本。

在 .NET Core 3.0 及更高版本中,此 API 触发的程序集加载受当前值 AssemblyLoadContext.CurrentContextualReflectionContext的影响。

throwOnError 参数指定在找不到类型时会发生什么情况,并取消某些其他异常条件,如“异常”部分中所述。 无论值如何 throwOnError,都会引发一些异常。 例如,如果找到类型但无法加载,则即使throwOnErrorfalse,也会引发 aTypeLoadException

下表显示了通过 Get 方法在反射类型时返回的基类成员。

成员类型 Static 非静态
构造函数
领域 是的。 字段始终是按名称和签名隐藏的。
事件 不適用 常见的类型系统规则是继承与实现属性的方法相同。 反射将属性视为按名称和签名隐藏。 请参阅下面的说明 2。
方法 是的。 方法(虚拟和非虚拟)可以按名称隐藏或按名称和签名隐藏。
嵌套类型
财产 不適用 常见的类型系统规则是继承与实现属性的方法相同。 反射将属性视为按名称和签名隐藏。 请参阅下面的说明 2。
  1. 按名称和签名隐藏会考虑签名的所有部分,包括自定义修饰符、返回类型、参数类型、sentinel 和非托管调用约定。 这是二进制比较。

  2. 对于反射,属性和事件通过名称和签名进行隐藏。 如果基类中同时具有 get 和 set 访问器的属性,但派生类只有 get 访问器,则派生类属性将隐藏基类属性,并且无法访问基类上的 setter。

  3. 自定义属性不是常见类型系统的一部分。

除非数组或 COM 类型已加载到可用类的表中,否则不会搜索它们。

typeName 可以是由其命名空间限定的类型名称,也可以是包含程序集名称规范的程序集限定名称。 请参阅 AssemblyQualifiedName

如果 typeName 包含命名空间而不是程序集名称,则此方法按该顺序仅搜索调用对象的程序集并 mscorlib.dll/System.Private.CoreLib.dll。 如果使用部分或完整的程序集名称完全限定 typeName,此方法将在指定的程序集中搜索。 如果程序集具有强名称,则需要完整的程序集名称。

AssemblyQualifiedName 属性返回完全限定的类型名称,包括嵌套类型、程序集名称和泛型参数。 支持公共语言运行时的所有编译器都将发出嵌套类的简单名称,并且反射会根据以下约定在查询时构造一个混乱的名称。

注释

处理器体系结构是程序集标识的一部分,可以指定为程序集名称字符串的一部分。 例如,“ProcessorArchitecture=msil”。 但是,出于兼容性原因,它不包含在属性返回的 AssemblyQualifiedName 字符串中。 还可以通过创建对象 AssemblyName 并将其传递给方法的适当 Load 重载来加载类型。 然后,可以使用该方法 Assembly.GetType 从程序集加载类型。 另请参阅 AssemblyName.ProcessorArchitecture

分隔符 含义
反斜杠 (\) 转义字符。
反杆 (') 位于泛型类型名称末尾的一个或多个表示类型参数数的数字之前。
方括号 ([]) 为构造的泛型类型将泛型类型参数列表括起来;在类型参数列表中,将程序集限定的类型括起来。
逗号 (,) 在程序集名称之前。
句点 (.) 表示命名空间标识符。
加号 (+) 在嵌套类之前。

例如,类的完全限定名称可能如下所示:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

如果命名空间为 TopNamespace.Sub+Namespace,则字符串必须位于加号(+)前面,并带有转义字符(\),以防止将其解释为嵌套分隔符。 反射发出此字符串,如下所示:

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

“++”变为“\++”,“\”变为“\\”。

此限定名称可以持久保存,稍后用于加载 Type。 若要搜索和加载 a Type,请仅对类型名称或程序集限定类型名称使用 GetTypeGetType 类型名称仅查找 Type 调用方程序集,然后在系统程序集中查找。 GetType 具有程序集限定类型名称的程序集将查找 Type 任何程序集。

类型名称可能包括表示有关类型的其他信息的尾随字符,例如类型是引用类型、指针类型还是数组类型。 若要检索没有这些尾随字符的类型名称,请使用 t.GetElementType().ToString(),其中的类型 t

空格与除程序集名称以外的所有类型名称组件相关。 在程序集名称中,“”分隔符之前的空格是相关的,但“,分隔符后面的空格将被忽略。

泛型类型的名称以反杆(')结尾,后跟表示泛型类型参数数的数字。 此名称管理的目的是允许编译器支持具有相同名称但类型参数数量不同的泛型类型,同时发生在同一范围内。 例如,反射从泛型方法和 Visual Basic 或 Visual C# 中返回已管理的名称Tuple`1Tuple`2Tuple<T0, T1>泛型方法Tuple(Of T)Tuple(Of T0, T1)Tuple<T>

对于泛型类型,类型参数列表括在括号中,类型参数用逗号分隔。 例如,泛型 Dictionary<TKey,TValue> 具有两个类型参数。 类型键的String一个Dictionary<TKey,TValue>MyType可能如下所示:

System.Collections.Generic.Dictionary`2[System.String,MyType]

若要在类型参数列表中指定程序集限定类型,请将程序集限定的类型括在括号内。 否则,分隔程序集限定名称部分的逗号将解释为分隔其他类型参数。 例如,一个Dictionary<TKey,TValue>MyType来自 MyAssembly.dll,其类型String为键,可能按如下所示指定:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

注释

仅当程序集限定类型出现在类型参数列表中时,才能将其括在括号中。 在类型参数列表中搜索限定和未限定类型的程序集的规则与限定和非限定的非泛型类型的规则相同。

可为 Null 的类型是泛型类型的特殊情况。 例如,可为 Int32 null 值由字符串“System.Nullable'1[System.Int32]”表示。

注释

还可以使用类型运算符获取可为 null 的类型。 例如,可通过 C# 和 GetType(Nullable(Of Boolean)) Visual Basic 返回typeof(Nullable<bool>)可为 Boolean null 的类型。

下表显示了用于 GetType 各种类型的语法。

获取 使用
可为 null Int32 Type.GetType("System.Nullable`1[System.Int32]")
指向的非托管指针 MyType Type.GetType("MyType*")
指向指向的指针的非托管指针 MyType Type.GetType("MyType**")
托管指针或对 MyType Type.GetType("MyType&")。 请注意,与指针不同,引用限制为一个级别。
父类和嵌套类 Type.GetType("MyParentClass+MyNestedClass")
一维数组,下限为 0 Type.GetType("MyArray[]")
具有未知下限的一维数组 Type.GetType("MyArray[*]")
n 维数组 括号内的逗号 (,)共 n-1 次。 例如, System.Object[,,] 表示三维 Object 数组。
二维数组的数组 Type.GetType("MyArray[][]")
具有未知下限的矩形二维数组 Type.GetType("MyArray[,]")
具有一个类型参数的泛型类型 Type.GetType("MyGenericType`1[MyType]")
具有两个类型参数的泛型类型 Type.GetType("MyGenericType`2[MyType,AnotherType]")
具有两个程序集限定的类型参数的泛型类型 Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
具有程序集限定类型参数的程序集限定泛型类型 Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")
一种泛型类型,其类型参数是具有两个类型参数的泛型类型 Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")

另请参阅

适用于

GetType(String, Boolean, Boolean)

Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs

获取 Type 具有指定名称的指定名称,指定在找不到类型时是否引发异常,以及是否执行区分大小写的搜索。

public:
 static Type ^ GetType(System::String ^ typeName, bool throwOnError, bool ignoreCase);
public static Type GetType(string typeName, bool throwOnError, bool ignoreCase);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, bool throwOnError, bool ignoreCase);
public static Type? GetType(string typeName, bool throwOnError, bool ignoreCase);
static member GetType : string * bool * bool -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * bool * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean, ignoreCase As Boolean) As Type

参数

typeName
String

要获取的类型的程序集限定名称。 请参阅 AssemblyQualifiedName。 如果类型位于当前正在执行的程序集或 mscorlib.dll/System.Private.CoreLib.dll中,则足以提供其命名空间限定的类型名称。

throwOnError
Boolean

true 如果找不到类型,则引发异常; falsenull返回 。 指定 false 还会禁止其他一些异常条件,但并非所有异常条件。 请参阅“异常”部分。

ignoreCase
Boolean

true 若要执行不区分大小写的搜索 typeNamefalse 则执行区分大小写的 typeName搜索。

返回

具有指定名称的类型。 如果未找到类型,则 throwOnError 参数指定是 null 返回还是引发异常。 在某些情况下,无论值如何 throwOnError,都会引发异常。 请参阅“异常”部分。

属性

例外

typeNamenull

调用类初始值设定项并引发异常。

throwOnErrortrue 且找不到类型。

-或-

throwOnError typeName包含true无效字符,例如嵌入的选项卡。

-或-

throwOnErrortruetypeName 字符串。

-或-

throwOnError表示truetypeName大小无效的数组类型。

-或-

typeName表示一个数组。TypedReference

throwOnErrortruetypeName 包含无效语法。 例如,“MyType[,*,]”。

-或-

typeName 表示具有指针类型、 ByRef 类型或 Void 作为其类型参数之一的泛型类型。

-或-

typeName 表示具有错误数量的类型参数的泛型类型。

-或-

typeName 表示泛型类型,其类型参数之一不满足相应类型参数的约束。

throwOnErrortrue 并且找不到程序集或其依赖项之一。

找到程序集或其依赖项之一,但无法加载。

程序集对当前加载的运行时无效。

注解

如果知道其程序集限定名称,则可以使用 GetType 该方法获取另一 Type 个程序集中的类型的对象,该名称可从中 AssemblyQualifiedName获取。 GetType 导致加载在 . 中指定的 typeName程序集。 还可以使用 Assembly.Load 该方法加载程序集,然后使用 Assembly.GetTypeAssembly.GetTypes 方法获取 Type 对象。 如果类型在编译时在程序已知的程序集中,则使用 C# 或 GetType Visual Basic 中的运算符会更高效typeof

仅限 .NET Framework: GetType 仅适用于从磁盘加载的程序集。 如果调用 GetType 查找使用 System.Reflection.Emit 服务定义的动态程序集中定义的类型,则可能会出现不一致的行为。 此行为取决于动态程序集是永久性的,即使用RunAndSaveSave枚举的访问模式System.Reflection.Emit.AssemblyBuilderAccess创建的。 如果动态程序集是永久性的并且以前已写入磁盘 GetType ,则加载程序会在磁盘上查找保存的程序集,加载该程序集,并从该程序集检索类型。 如果在调用时 GetType 程序集尚未保存到磁盘,该方法将 null返回。 GetType 不了解暂时性动态程序集;因此,调用 GetType 以检索暂时性动态程序集中的类型将 null返回。

在 .NET Framework 中,若要在 GetType 动态模块上使用,在保存之前订阅 AppDomain.AssemblyResolve 事件和调用 GetType 。 否则,将在内存中获取程序集的两个副本。

在 .NET Core 3.0 及更高版本中,此 API 触发的程序集加载受当前值 AssemblyLoadContext.CurrentContextualReflectionContext的影响。

throwOnError 参数指定在找不到类型时会发生什么情况,并取消某些其他异常条件,如“异常”部分中所述。 无论值如何 throwOnError,都会引发一些异常。 例如,如果找到类型但无法加载,则即使throwOnErrorfalse,也会引发 aTypeLoadException

下表显示了通过 Get 方法在反射类型时返回的基类成员。

成员类型 Static 非静态
构造函数
领域 是的。 字段始终是按名称和签名隐藏的。
事件 不適用 常见的类型系统规则是继承与实现属性的方法相同。 反射将属性视为按名称和签名隐藏。 请参阅下面的说明 2。
方法 是的。 方法(虚拟和非虚拟)可以按名称隐藏或按名称和签名隐藏。
嵌套类型
财产 不適用 常见的类型系统规则是继承与实现属性的方法相同。 反射将属性视为按名称和签名隐藏。 请参阅下面的说明 2。
  1. 按名称和签名隐藏会考虑签名的所有部分,包括自定义修饰符、返回类型、参数类型、sentinel 和非托管调用约定。 这是二进制比较。

  2. 对于反射,属性和事件通过名称和签名进行隐藏。 如果基类中同时具有 get 和 set 访问器的属性,但派生类只有 get 访问器,则派生类属性将隐藏基类属性,并且无法访问基类上的 setter。

  3. 自定义属性不是常见类型系统的一部分。

除非数组或 COM 类型已加载到可用类的表中,否则不会搜索它们。

typeName 可以是由其命名空间限定的类型名称,也可以是包含程序集名称规范的程序集限定名称。 请参阅 AssemblyQualifiedName

如果 typeName 包含命名空间而不是程序集名称,则此方法按该顺序仅搜索调用对象的程序集并 mscorlib.dll/System.Private.CoreLib.dll。 如果使用部分或完整的程序集名称完全限定 typeName,此方法将在指定的程序集中搜索。 如果程序集具有强名称,则需要完整的程序集名称。

AssemblyQualifiedName 属性返回完全限定的类型名称,包括嵌套类型、程序集名称和类型参数。 支持公共语言运行时的所有编译器都将发出嵌套类的简单名称,并且反射会根据以下约定在查询时构造一个混乱的名称。

注释

处理器体系结构是程序集标识的一部分,可以指定为程序集名称字符串的一部分。 例如,“ProcessorArchitecture=msil”。 但是,出于兼容性原因,它不包含在属性返回的 AssemblyQualifiedName 字符串中。 还可以通过创建对象 AssemblyName 并将其传递给方法的适当 Load 重载来加载类型。 然后,可以使用该方法 Assembly.GetType 从程序集加载类型。 另请参阅 AssemblyName.ProcessorArchitecture

分隔符 含义
反斜杠 (\) 转义字符。
反杆 (') 位于泛型类型名称末尾的一个或多个表示类型参数数的数字之前。
方括号 ([]) 为构造的泛型类型将泛型类型参数列表括起来;在类型参数列表中,将程序集限定的类型括起来。
逗号 (,) 在程序集名称之前。
句点 (.) 表示命名空间标识符。
加号 (+) 在嵌套类之前。

例如,类的完全限定名称可能如下所示:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

如果命名空间为 TopNamespace.Sub+Namespace,则字符串必须位于加号(+)前面,并带有转义字符(\),以防止将其解释为嵌套分隔符。 反射发出此字符串,如下所示:

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

“++”变为“\++”,“\”变为“\\”。

此限定名称可以持久保存,稍后用于加载 Type。 若要搜索和加载 a Type,请仅对类型名称或程序集限定类型名称使用 GetTypeGetType 类型名称仅查找 Type 调用方程序集,然后在系统程序集中查找。 GetType 具有程序集限定类型名称的程序集将查找 Type 任何程序集。

类型名称可能包括表示有关类型的其他信息的尾随字符,例如类型是引用类型、指针类型还是数组类型。 若要检索没有这些尾随字符的类型名称,请使用 t.GetElementType().ToString(),其中的类型 t

空格与除程序集名称以外的所有类型名称组件相关。 在程序集名称中,“”分隔符之前的空格是相关的,但“,分隔符后面的空格将被忽略。

泛型类型的名称以反杆(')结尾,后跟表示泛型类型参数数的数字。 此名称管理的目的是允许编译器支持具有相同名称但类型参数数量不同的泛型类型,同时发生在同一范围内。 例如,反射从泛型方法和 Visual Basic 或 Visual C# 中返回已管理的名称Tuple`1Tuple`2Tuple<T0, T1>泛型方法Tuple(Of T)Tuple(Of T0, T1)Tuple<T>

对于泛型类型,类型参数列表括在括号中,类型参数用逗号分隔。 例如,泛型 Dictionary<TKey,TValue> 具有两个类型参数。 类型键的String一个Dictionary<TKey,TValue>MyType可能如下所示:

System.Collections.Generic.Dictionary`2[System.String,MyType]

若要在类型参数列表中指定程序集限定类型,请将程序集限定的类型括在括号内。 否则,分隔程序集限定名称部分的逗号将解释为分隔其他类型参数。 例如,一个Dictionary<TKey,TValue>MyType来自 MyAssembly.dll,其类型String为键,可能按如下所示指定:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

注释

仅当程序集限定类型出现在类型参数列表中时,才能将其括在括号中。 在类型参数列表中搜索限定和未限定类型的程序集的规则与限定和非限定的非泛型类型的规则相同。

可为 Null 的类型是泛型类型的特殊情况。 例如,可为 Int32 null 值由字符串“System.Nullable'1[System.Int32]”表示。

注释

还可以使用类型运算符获取可为 null 的类型。 例如,可通过 C# 和 GetType(Nullable(Of Boolean)) Visual Basic 返回typeof(Nullable<bool>)可为 Boolean null 的类型。

下表显示了用于 GetType 各种类型的语法。

获取 使用
可为 null Int32 Type.GetType("System.Nullable`1[System.Int32]")
指向的非托管指针 MyType Type.GetType("MyType*")
指向指向的指针的非托管指针 MyType Type.GetType("MyType**")
托管指针或对 MyType Type.GetType("MyType&")。 请注意,与指针不同,引用限制为一个级别。
父类和嵌套类 Type.GetType("MyParentClass+MyNestedClass")
一维数组,下限为 0 Type.GetType("MyArray[]")
具有未知下限的一维数组 Type.GetType("MyArray[*]")
n 维数组 括号内的逗号 (,)共 n-1 次。 例如, System.Object[,,] 表示三维 Object 数组。
二维数组的数组 Type.GetType("MyArray[][]")
具有未知下限的矩形二维数组 Type.GetType("MyArray[,]")
具有一个类型参数的泛型类型 Type.GetType("MyGenericType`1[MyType]")
具有两个类型参数的泛型类型 Type.GetType("MyGenericType`2[MyType,AnotherType]")
具有两个程序集限定的类型参数的泛型类型 Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
具有程序集限定类型参数的程序集限定泛型类型 Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")
一种泛型类型,其类型参数是具有两个类型参数的泛型类型 Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")

另请参阅

适用于

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)

Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs

获取具有指定名称的类型,可以选择提供用于解析程序集和类型的自定义方法。

public:
 static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
public static Type GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type)) As Type

参数

typeName
String

要获取的类型的名称。 如果提供了参数 typeResolver ,则类型名称可以是能够解析的任何字符串 typeResolverassemblyResolver如果提供了参数,或者如果使用标准类型解析,typeName则必须是程序集限定的名称(请参阅AssemblyQualifiedName),除非该类型位于当前正在执行的程序集或 mscorlib.dll/System.Private.CoreLib.dll中,在这种情况下,它足以提供其命名空间限定的类型名称。

assemblyResolver
Func<AssemblyName,Assembly>

一个查找并返回在 中指定的 程序集的方法。 程序集名称作为assemblyResolverAssemblyName对象传递给。 如果未 typeName 包含程序集的名称, assemblyResolver 则不调用。 如果未 assemblyResolver 提供,则执行标准程序集解析。

警告:不要从未知或不受信任的调用方传递方法。 这样做可能会导致恶意代码特权提升。 仅使用你提供或熟悉的方法。

typeResolver
Func<Assembly,String,Boolean,Type>

一个方法,它查找并返回由 typeName 由标准程序集解析返回 assemblyResolver 的程序集中指定的类型。 如果未提供程序集,则 typeResolver 该方法可以提供一个程序集。 该方法还采用一个参数,指定是否执行不区分大小写的搜索; false 传递给该参数。

警告:不要从未知或不受信任的调用方传递方法。

返回

具有指定名称的类型,或者 null 找不到该类型。

属性

例外

typeNamenull

调用类初始值设定项并引发异常。

当分析为类型名称和程序集名称时 typeName (例如,当简单类型名称包含一个未转义的特殊字符时),将发生错误。

-或-

typeName 表示具有指针类型、 ByRef 类型或 Void 作为其类型参数之一的泛型类型。

-或-

typeName 表示具有错误数量的类型参数的泛型类型。

-或-

typeName 表示泛型类型,其类型参数之一不满足相应类型参数的约束。

typeName 表示无效类型,例如,一个数组 TypedReference

找到程序集或其依赖项之一,但无法加载。

-或-

typeName 包含无效的程序集名称。

-或-

typeName 是没有类型名称的有效程序集名称。

程序集或其依赖项之一对当前加载的运行时无效。

注解

可以在方法重载中找到GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)此方法的使用方案以及有关assemblyResolver参数typeResolver的详细信息。

注释

如果 typeName 找不到,则对方法的 GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) 调用将 null返回 。 它不会引发异常。 若要控制是否引发异常,请调用具有throwOnError参数的方法的GetType重载。

调用此方法重载与调用GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)方法重载和指定falsethrowOnErrorignoreCase参数相同。

适用于

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)

Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs
Source:
Type.CoreCLR.cs

获取具有指定名称的类型,指定在找不到类型时是否引发异常,并选择性地提供自定义方法来解析程序集和类型。

public:
 static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
public static Type GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean) As Type

参数

typeName
String

要获取的类型的名称。 如果提供了参数 typeResolver ,则类型名称可以是能够解析的任何字符串 typeResolverassemblyResolver如果提供了参数,或者如果使用标准类型解析,typeName则必须是程序集限定的名称(请参阅AssemblyQualifiedName),除非该类型位于当前正在执行的程序集或 mscorlib.dll/System.Private.CoreLib.dll中,在这种情况下,它足以提供其命名空间限定的类型名称。

assemblyResolver
Func<AssemblyName,Assembly>

一个查找并返回在 中指定的 程序集的方法。 程序集名称作为assemblyResolverAssemblyName对象传递给。 如果未 typeName 包含程序集的名称, assemblyResolver 则不调用。 如果未 assemblyResolver 提供,则执行标准程序集解析。

警告:不要从未知或不受信任的调用方传递方法。 这样做可能会导致恶意代码特权提升。 仅使用你提供或熟悉的方法。

typeResolver
Func<Assembly,String,Boolean,Type>

一个方法,它查找并返回由 typeName 由标准程序集解析返回 assemblyResolver 的程序集中指定的类型。 如果未提供程序集,则该方法可以提供一个程序集。 该方法还采用一个参数,指定是否执行不区分大小写的搜索; false 传递给该参数。

警告:不要从未知或不受信任的调用方传递方法。

throwOnError
Boolean

true 如果找不到类型,则引发异常; falsenull返回 。 指定 false 还会禁止其他一些异常条件,但并非所有异常条件。 请参阅“异常”部分。

返回

具有指定名称的类型。 如果未找到类型,则 throwOnError 参数指定是 null 返回还是引发异常。 在某些情况下,无论值如何 throwOnError,都会引发异常。 请参阅“异常”部分。

属性

例外

typeNamenull

调用类初始值设定项并引发异常。

throwOnErrortrue 且找不到类型。

-或-

throwOnError typeName包含true无效字符,例如嵌入的选项卡。

-或-

throwOnErrortruetypeName 字符串。

-或-

throwOnError表示truetypeName大小无效的数组类型。

-或-

typeName表示一个数组。TypedReference

当分析为类型名称和程序集名称时 typeName (例如,当简单类型名称包含一个未转义的特殊字符时),将发生错误。

-或-

throwOnErrortruetypeName 包含无效的语法(例如,“MyType[,*,]”)。

-或-

typeName 表示具有指针类型、 ByRef 类型或 Void 作为其类型参数之一的泛型类型。

-或-

typeName 表示具有错误数量的类型参数的泛型类型。

-或-

typeName 表示泛型类型,其类型参数之一不满足相应类型参数的约束。

throwOnErrortrue 并且找不到程序集或其依赖项之一。

-或-

typeName 包含无效的程序集名称。

-或-

typeName 是没有类型名称的有效程序集名称。

找到程序集或其依赖项之一,但无法加载。

程序集或其依赖项之一对当前加载的运行时无效。

注解

可以在方法重载中找到GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)此方法的使用方案以及有关assemblyResolver参数typeResolver的详细信息。

调用此方法重载与调用GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)方法重载和指定falseignoreCase参数相同。

适用于