Type.GetType

Type.GetType 是一个静态方法,用于根据类型名称获取对应的 Type 对象。Type 对象在运行时提供了类型的信息,可以用于反射(Reflection)、动态类型操作等场景。

方法签名

Type.GetType 有以下几种重载形式:
  1. Type.GetType(string typeName)
    • 参数:
      • typeName:类型名称的字符串表示。
    • 返回值:
      • 返回对应的 Type 对象,如果找不到类型,则返回 null
  2. Type.GetType(string typeName, bool throwOnError)
    • 参数:
      • typeName:类型名称的字符串表示。
      • throwOnError:如果为 true,当类型未找到时会抛出异常;如果为 false,返回 null
    • 返回值:
      • 返回对应的 Type 对象,如果找不到类型且 throwOnErrorfalse,则返回 null;如果 throwOnErrortrue,则抛出异常。
  3. Type.GetType(string typeName, bool throwOnError, bool ignoreCase)
    • 参数:
      • typeName:类型名称的字符串表示。
      • throwOnError:如果为 true,当类型未找到时会抛出异常;如果为 false,返回 null
      • ignoreCase:如果为 true,类型名称的匹配会忽略大小写;如果为 false,则区分大小写。
    • 返回值:
      • 返回对应的 Type 对象,如果找不到类型且 throwOnErrorfalse,则返回 null;如果 throwOnErrortrue,则抛出异常。

示例代码

示例 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
 

注意事项

  1. 类型名称格式:
    • typeName 必须是完全限定的类型名称,包括命名空间。例如,System.String 而不是 String
    • 如果类型在其他程序集中,需要提供程序集的完全限定名称。例如:
      csharp
      复制
      Type.GetType("Namespace.TypeName, AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
       
  2. 性能:
    • Type.GetType 方法在查找类型时可能会有一定的性能开销,尤其是在类型未找到的情况下。如果需要频繁调用,建议缓存结果。
  3. 反射:
    • 获取到 Type 对象后,可以使用反射来获取类型的信息,例如属性、方法、字段等。例如:
      csharp
      复制
      Type type = Type.GetType("System.String");
      var properties = type.GetProperties();
      foreach (var prop in properties)
      {
          Console.WriteLine(prop.Name);
      }
       

总结

Type.GetType 是一个非常有用的静态方法,用于根据类型名称获取对应的 Type 对象。它广泛用于反射、动态类型操作等场景。通过合理使用 Type.GetType,可以实现灵活的类型操作和动态编程。
posted @ 2025-08-15 18:09  yinghualeihenmei  阅读(37)  评论(0)    收藏  举报