Alter cast oder neuer cast ?


Thomas Wölfer
Thomas Wölfer

08. September 2008


In C# gibt es neben dem C-Style cast "(Foo)" auch die Möglichkeit mit dem "as" Operator eine Typumwandlung durchzuführen. Wann verwendet man aber welchen? Gute Frage - es gibt meiner Ansicht nach aber eine einfache Regel: Wenn die Typumwandlung auf jeden Fall möglich sein muss, dann will man den "alten" cast, gibt es im Code später hingegen noch eine Behandlung, ob die Umwandlung mit "as" geklappt hat - und nur dann - verwendet man den "as".

Zum Beispiel:

// Hier ist es zwingend, das o ein BarObj ist.
void foo( object o)
{
   BarObj bar = (BarObj)o; // <- Wenn das nicht geht, gibt es an dieser Stelle eine Exception.

   // .... mehr code
}

// Hier wird erwartet, das auch was anderes ankommen kann
void foo2( object o)
{
   BarObj bar = o as BarObj;

   if( bar != null)
   {
       // Ohne einen solchen Vergleich auf null ist der "as" nicht angebracht.
   }
}