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: explizit und implizit.

Implizite (Implicit) Typumwandlung

Findet automatisch statt, wenn der Compiler sicher ist, dass die Umwandlung sicher ist und keinen Datenverlust verursacht. Zum Beispiel von einem Typ mit kleinerem Wertebereich zu einem mit größerem.

// Implizite Umwandlung von int zu long
int i = 100;
long l = i;

Explizite (Explicit) Typumwandlung

Erfordert die Angabe des Umwandlungsoperators ((Typ)) im Code und wird verwendet, wenn die Umwandlung zu Datenverlust führen oder eine Ausnahme auslösen kann. Sie ist notwendig beim Konvertieren von einem Typ mit größerem Wertebereich zu einem mit kleinerem oder zwischen nicht verwandten Typen.

// Explizite Umwandlung von double zu int
double d = 123.45;
int i = (int)d; // Dezimalanteil wird verworfen

// Explizite Umwandlung von object zu string
object obj = "Hello";
string s = (string)obj;

// Verwendung der Operatoren as und is
object objAs = "World";
string sAs = objAs as string; // Gibt null zurück, wenn die Umwandlung nicht möglich ist
if (objAs is string) // Prüft, ob das Objekt vom Typ string ist
{
    string sIs = (string)objAs;
}

Vergleich von expliziter Umwandlung, as und is

Operation Beschreibung Fehler bei Fehlschlag
(Typ) Ausdruck Explizite Umwandlung. Erfordert exakte Übereinstimmung des Typs. InvalidCastException
Ausdruck as Typ Versucht, den Typ zu konvertieren. Funktioniert nur für Referenztypen und Typen, die null erlauben. Gibt null zurück
Ausdruck is Typ Prüft, ob der Ausdruck in den angegebenen Typ konvertiert werden kann. Wahrheitswert (true/false)

Benutzerdefinierte Umwandlungen

Der Entwickler kann eigene explizite und implizite Operatoren für benutzerdefinierte Typen definieren, indem er die Schlüsselwörter implicit und explicit verwendet.

// Beispiel für eine benutzerdefinierte implizite Umwandlung
public class Inches
{
    public int Value { get; set; }
    public static implicit operator Millimeters(Inches i)
    {
        return new Millimeters { Value = i.Value * 25 };
    }
}

public class Millimeters
{
    public int Value { get; set; }
}

// Verwendung
Inches inches = new Inches { Value = 10 };
Millimeters mm = inches; // Implizite Umwandlung
// Beispiel für eine benutzerdefinierte explizite Umwandlung
public class Kilograms
{
    public int Value { get; set; }
}

public class Pounds
{
    public int Value { get; set; }
    public static explicit operator Kilograms(Pounds p)
    {
        return new Kilograms { Value = (int)(p.Value / 2.20462) };
    }
}

// Verwendung
Pounds pounds = new Pounds { Value = 100 };
Kilograms kg = (Kilograms)pounds; // Explizite Umwandlung