Avatar ·

Typüberprüfung in C#: typeof, GetType() oder is – was und wann verwenden?

Hallo zusammen. Ich bin ein Anfänger in C# und verwechsle ständig die Typüberprüfungen. Es gibt drei Möglichkeiten: `typeof`, die Methode `GetType()` und den Operator `is`. Zum Beispiel habe ich diesen Code: ```csharp object obj = "Hello"; // Variante 1 if (obj.GetType() == typeof(string)) Console.WriteLine("Das ist ein String via GetType"); // Variante 2 if (obj is string) Console.WriteLine("Das ist ein String via is"); // Variante 3 Type t = typeof(string); ``` Anscheinend überprüfen alle drei den Typ, aber ich bemerke ein seltsames Verhalten. Wenn ich `is` mit nullable Typen verwende, verhält es sich anders als `GetType()`. Zum Beispiel: ```csharp int? x = 5; if (x is int) // true Console.WriteLine("x ist int"); if (x.GetType() == typeof(int)) // auch true Console.WriteLine("x.GetType == typeof(int)"); ``` Aber wenn x = null ist, dann gibt `x is int?` false aus, und `GetType()` wirft sogar eine NullReferenceException. Und noch ein Punkt: Ich habe gelesen, dass `typeof` nur mit Typen zur Compile-Zeit funktioniert, während `GetType`