myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE
   » Gadget für Windows
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin

Ressourcen
» guide to C#
» openbook: Visual C#
» openbook: OO
» MSDN Webcasts
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Knowledge Base » FAQ » [FAQ] Casten aber richtig: () / is / as
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

[FAQ] Casten aber richtig: () / is / as

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Programmierhans
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-1651.gif


Dabei seit: 05.04.2005
Beiträge: 4.221
Entwicklungsumgebung: VS2003-VS2013 / SAP WebIDE
Herkunft: Zentralschweiz


Programmierhans ist offline

[FAQ] Casten aber richtig: () / is / as

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:
22.11.2006 20:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 12 Jahre.
Der letzte Beitrag ist älter als 12 Jahre.
Antwort erstellen


© Copyright 2003-2018 myCSharp.de-Team. Alle Rechte vorbehalten. 14.12.2018 22:18