Es hängt wirklich davon ab, ob Sie wissen, ob o
ist eine Zeichenkette und was Sie damit machen wollen. Wenn Ihr Kommentar bedeutet, dass o
wirklich ein String ist, würde ich den geraden bevorzugen (string)o
Es ist unwahrscheinlich, dass er scheitert.
Der größte Vorteil des geraden Wurfs ist, dass man bei einem Fehlschlag eine InvalidCastException was Ihnen ziemlich genau sagt, was schief gelaufen ist.
Mit dem as
Betreiber, wenn o
keine Zeichenkette ist, s
wird eingestellt auf null
was praktisch ist, wenn Sie unsicher sind und testen wollen s
:
string s = o as string;
if ( s == null )
{
// well that's not good!
gotoPlanB();
}
Wenn Sie diesen Test jedoch nicht durchführen, werden Sie s
später und haben eine NullReferenceException geworfen. Diese sind in der Regel häufiger und ein Los schwerer aufzuspüren, wenn sie erst einmal in freier Wildbahn vorkommen, da fast jede Zeile eine Variable dereferenziert und eine auslösen kann. Andererseits, wenn Sie versuchen, auf einen Werttyp zu casten (irgendeine Primitive oder Strukturen wie DateTime ), müssen Sie den geraden Wurf verwenden - die as
wird nicht funktionieren.
Im speziellen Fall der Konvertierung in eine Zeichenkette hat jedes Objekt eine ToString
Ihre dritte Methode kann also in Ordnung sein, wenn o
nicht null ist und Sie denken, dass die ToString
Methode könnte das tun, was Sie wollen.