Type.GetType
Type.GetType
是一个静态方法,用于根据类型名称获取对应的 Type
对象。Type
对象在运行时提供了类型的信息,可以用于反射(Reflection)、动态类型操作等场景。方法签名
Type.GetType
有以下几种重载形式:-
Type.GetType(string typeName)
-
参数:
-
typeName
:类型名称的字符串表示。
-
-
返回值:
-
返回对应的
Type
对象,如果找不到类型,则返回null
。
-
-
-
Type.GetType(string typeName, bool throwOnError)
-
参数:
-
typeName
:类型名称的字符串表示。 -
throwOnError
:如果为true
,当类型未找到时会抛出异常;如果为false
,返回null
。
-
-
返回值:
-
返回对应的
Type
对象,如果找不到类型且throwOnError
为false
,则返回null
;如果throwOnError
为true
,则抛出异常。
-
-
-
Type.GetType(string typeName, bool throwOnError, bool ignoreCase)
-
参数:
-
typeName
:类型名称的字符串表示。 -
throwOnError
:如果为true
,当类型未找到时会抛出异常;如果为false
,返回null
。 -
ignoreCase
:如果为true
,类型名称的匹配会忽略大小写;如果为false
,则区分大小写。
-
-
返回值:
-
返回对应的
Type
对象,如果找不到类型且throwOnError
为false
,则返回null
;如果throwOnError
为true
,则抛出异常。
-
-
示例代码
示例 1:基本用法
csharp
using System;
class Program
{
static void Main(string[] args)
{
// 获取类型信息
Type type = Type.GetType("System.String");
if (type != null)
{
Console.WriteLine($"Type: {type.FullName}");
}
else
{
Console.WriteLine("Type not found.");
}
}
}
输出结果
Type: System.String
示例 2:处理未找到类型的情况
csharp
using System;
class Program
{
static void Main(string[] args)
{
// 获取类型信息
Type type = Type.GetType("System.UnknownType");
if (type != null)
{
Console.WriteLine($"Type: {type.FullName}");
}
else
{
Console.WriteLine("Type not found.");
}
}
}
输出结果
Type not found.
示例 3:使用 throwOnError
参数
csharp
using System;
class Program
{
static void Main(string[] args)
{
try
{
// 获取类型信息,如果类型未找到会抛出异常
Type type = Type.GetType("System.UnknownType", true);
Console.WriteLine($"Type: {type.FullName}");
}
catch (TypeLoadException ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
}
输出结果
Error: Could not load type 'System.UnknownType'.
示例 4:使用 ignoreCase
参数
csharp
using System;
class Program
{
static void Main(string[] args)
{
// 获取类型信息,忽略大小写
Type type = Type.GetType("system.string", false, true);
if (type != null)
{
Console.WriteLine($"Type: {type.FullName}");
}
else
{
Console.WriteLine("Type not found.");
}
}
}
输出结果
Type: System.String
注意事项
-
类型名称格式:
-
typeName
必须是完全限定的类型名称,包括命名空间。例如,System.String
而不是String
。 -
如果类型在其他程序集中,需要提供程序集的完全限定名称。例如:csharp
Type.GetType("Namespace.TypeName, AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
-
-
性能:
-
Type.GetType
方法在查找类型时可能会有一定的性能开销,尤其是在类型未找到的情况下。如果需要频繁调用,建议缓存结果。
-
-
反射:
-
获取到
Type
对象后,可以使用反射来获取类型的信息,例如属性、方法、字段等。例如:csharpType type = Type.GetType("System.String"); var properties = type.GetProperties(); foreach (var prop in properties) { Console.WriteLine(prop.Name); }
-
总结
Type.GetType
是一个非常有用的静态方法,用于根据类型名称获取对应的 Type
对象。它广泛用于反射、动态类型操作等场景。通过合理使用 Type.GetType
,可以实现灵活的类型操作和动态编程。