Avatar ·

C#中的类型检查:typeof、GetType()还是is?何时使用什么?

大家好!我是一名初学C#的开发者,一直搞不清楚C#中的类型检查。有三种方式:`typeof`运算符、`GetType()`方法和`is`运算符。但什么时候该用哪个呢? 下面是一个让我困惑的例子: ```csharp object obj = "Hello, world!"; // 方式1 if (obj.GetType() == typeof(string)) Console.WriteLine("这是字符串 (GetType)"); // 方式2 if (obj is string) Console.WriteLine("这是字符串 (is)"); // 方式3 Type t = typeof(string); if (obj.GetType() == t) Console.WriteLine("这是字符串 (typeof)"); ``` 所有三种方式都能工作,但我感觉它们并不是可以互换的。例如,我听说`typeof`只在编译时对类型起作用,而`GetType()`在运行时起作用。至于`is`,它有点神奇——它似乎既能检查类型,又能同时进行类型转换。 请告诉我: 1. `typeof`、`GetType()`和`is`之间的根本区别是什么? 2. 什么时候该用哪个,才能让代码正确?