Vérification de type en C# : typeof, GetType() ou is — quand utiliser quoi ?
Bonjour à tous. Je suis un développeur C# débutant et je me mélange constamment les pinceaux avec les vérifications de type. Il y a trois façons : `typeof`, la méthode `GetType()` et l'opérateur `is`.
Par exemple, j'ai ce code :
```csharp
object obj = "Hello";
// Option 1
if (obj.GetType() == typeof(string))
Console.WriteLine("C'est une chaîne via GetType");
// Option 2
if (obj is string)
Console.WriteLine("C'est une chaîne via is");
// Option 3
Type t = typeof(string);
```
Apparemment, les trois vérifient le type, mais je remarque un comportement étrange. Quand j'utilise `is` avec des types nullables, il ne se comporte pas comme `GetType()`. Par exemple :
```csharp
int? x = 5;
if (x is int) // true
Console.WriteLine("x est int");
if (x.GetType() == typeof(int)) // true aussi
Console.WriteLine("x.GetType == typeof(int)");
```
Mais si x = null, alors `x is int?` renvoie false, et `GetType()` lèvera carrément une NullReferenceException.
Et autre point : j'ai lu que `typeof` ne fonctionne qu'avec les types au moment de la compilation, alors que `GetType`