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. 什么时候该用哪个,才能让代码正确?