Avatar ·

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`