Skip to content

C# 里拿到一个类型,有 typeof 和 GetType() 两条路。返回值都是 System.Type,参数要求不一样。

typeof 的括号里必须是类型名,不能是变量:

csharp
Int32 i = new Int32();

Type t1 = typeof(Int32); // 可以
// Type t2 = typeof(i);  // 编译不过,i 是变量

GetType() 继承自 object,每个实例都能调,返回这个对象运行时的类型:

csharp
Int32 i = new Int32();
Type t = i.GetType(); // 也是 Int32

编译期就知道类型,用 typeof(SomeType)。手里只有对象、要问它实际是什么(尤其是基类引用、接口引用),用 obj.GetType()。泛型里拿 T 的类型同样是 typeof(T),因为 T 在那里就是类型参数,不是变量。

测试开发工程师 · 专注自动化与系统架构 | 邮箱: hansblog@atumsoul.win