myCSharp.de - DIE C# und .NET Community (http://www.mycsharp.de/wbb2/index.php)
- Knowledge Base (http://www.mycsharp.de/wbb2/board.php?boardid=68)
-- FAQ (http://www.mycsharp.de/wbb2/board.php?boardid=70)
--- [FAQ] Casten aber richtig: () / is / as (http://www.mycsharp.de/wbb2/thread.php?threadid=28579)


Geschrieben von Programmierhans am 22.11.2006 um 20:25:
  [FAQ] Casten aber richtig: () / is / as
Kurz und bündig zusammengefasst die verschiedenen Varianten von einem Type in einen anderen zu casten.

Es gibt verschiedene Varianten:

Direct-Cast:
-Harter Cast kann InvalidCastException auslösen wenn der Type nicht passt:
-Zugriff auf die Zielvariable darf erst nach einer Prüfung auf null stattfinden (c könnte ja null sein)

As-Cast:
-Weicher Cast mit Typenabfrage: Löst keine InvalidCastException aus wenn der Type nicht passt.
-Zugriff auf die Zielvariable darf erst nach einer Prüfung auf null stattfinden (c könnte ja null sein)

Sichere Varianten

mittels is:
-Prüfung auf korrekten Typen (null is TextBox ergibt = false)
-Zugriff auf die Zielvariable sofort möglich

mittels as:
-Prüfung auf null und auf korrekten Typen
-Zugriff auf die Zielvariable sofort möglich
-Insgesamt weniger Effizient als die is-Variante
[Edit]
-spart den is-Zugriff
[/Edit]

C#-Code:
foreach (Control c in this.Controls)
{
    //Direct-Cast (es kracht wenn c nicht TextBox ist):
    // und es kracht beim Zugriff auf tDirect wenn c null ist.
    TextBox tDirect=(TextBox)c;

    //As-Cast es kracht beim Zugriff auf tAS wenn c null ist oder c keine Textbox ist (dann ist tAs auch null).
    TextBox tAs=c as TextBox;

    //der As-Cast macht intern so was:
    //es kracht beim Zugriff auf tAS wenn c null ist.
    TextBox tIs=c is TextBox?(TextBox)c:null;


    //und so ist die sichere Variante mit is:
    if(c is TextBox)
    {
        TextBox tSave=(TextBox)c;
        //so ist tSave sicher nie null
    }

    //und so eine sichere Variante mit as
    TextBox tAsSave=c as TextBox;
    if (tAsSave!=null)
    {
        //so ist tAsSave sicher nie null
    }
}

Edit: Is-Variante gekürzt:


© Copyright 2003-2019 myCSharp.de-Team. Alle Rechte vorbehalten. 26.03.2019 01:00