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`