Sobes.tech
Junior

Welche Arten der Typumwandlung gibt es in C#?

sobes.tech KI

Antwort von AI

In C# gibt es zwei Hauptarten der Typumwandlung:

  1. Explizite Umwandlung (Explicit conversion): Erfordert die Verwendung des Operators (Typ). Wird verwendet, wenn der Compiler die Umwandlung nicht automatisch sicher durchführen kann, z.B. bei der Umwandlung von einer Basisklasse zu einer abgeleiteten Klasse oder von einem genaueren zu einem weniger genauen Typ (z.B. double zu int). Dies kann zu Datenverlust oder Laufzeitfehlern (InvalidCastException) führen.

    // Explizite Umwandlung von double zu int
    double d = 123.45;
    int i = (int)d; // i wird 123 sein
    
    // Explizite Umwandlung eines Objekts in einen bestimmten Typ
    object obj = "Hello";
    string s = (string)obj; // s wird "Hello" sein
    
  2. Implizite Umwandlung (Implicit conversion): Wird automatisch vom Compiler durchgeführt, wenn die Umwandlung bekannt und sicher ist, also ohne Datenverlust. Zum Beispiel die Umwandlung von int zu double.

    // Implizite Umwandlung von int zu double
    int x = 10;
    double y = x; // y wird 10.0 sein
    
    // Implizite Umwandlung einer abgeleiteten Klasse in eine Basisklasse
    class Base {}
    class Derived : Base {}
    
    Derived derivedObj = new Derived();
    Base baseObj = derivedObj; // Implizite Umwandlung
    

Außerdem gibt es die Operatoren as und is, die ebenfalls zur Typumwandlung gehören, aber mit besonderen Eigenschaften:

  • Operator as: Führt die Typumwandlung durch, wenn möglich, und gibt null zurück, wenn die Umwandlung nicht möglich ist. Wirft keine InvalidCastException. Wird nur für Referenztypen und Nullable-Typen verwendet.

    // Verwendung des Operators as
    object obj2 = "World";
    string s2 = obj2 as string; // s2 wird "World" sein
    
    object obj3 = 123;
    string s3 = obj3 as string; // s3 wird null sein
    
  • Operator is: Prüft, ob ein Objekt eine Instanz eines bestimmten Typs oder eines Typs, der davon abgeleitet ist, ist. Gibt true oder false zurück. In den neuesten C#-Versionen kann es mit Mustern (Pattern Matching) verwendet werden, um gleichzeitig zu prüfen und zu konvertieren.

    // Verwendung des Operators is zur Typprüfung
    object obj4 = "Example";
    if (obj4 is string)
    {
        // Aktionen, wenn das Objekt eine Zeichenkette ist
    }
    
    // Verwendung von is mit Muster (Pattern matching)
    if (obj4 is string str)
    {
        // str ist hier als String verfügbar
    }