Es hängt wirklich davon ab, ob Sie wissen, ob o
es sich um eine Zeichenfolge handelt und was Sie damit machen möchten. Wenn Ihr Kommentar bedeutet, dass es sich o
wirklich wirklich um eine Zeichenfolge handelt, würde ich die gerade (string)o
Besetzung bevorzugen - es ist unwahrscheinlich, dass sie fehlschlägt.
Der größte Vorteil der Verwendung der geraden Besetzung besteht darin, dass Sie bei einem Fehlschlag eine InvalidCastException erhalten , die Ihnen ziemlich genau sagt, was schief gelaufen ist.
as
Wenn der Operator o
keine Zeichenfolge ist, s
wird er auf gesetzt. null
Dies ist praktisch, wenn Sie sich nicht sicher sind und testen möchten 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 ihn s
später verwenden und eine NullReferenceException auslösen . Diese sind in der Regel häufiger und viel schwerer zu finden, wenn sie in freier Wildbahn auftreten, da fast jede Zeile eine Variable dereferenziert und möglicherweise eine wirft. Wenn Sie dagegen versuchen, in einen Werttyp (ein Grundelement oder Strukturen wie DateTime ) umzuwandeln , müssen Sie die gerade Umwandlung verwenden - das as
funktioniert nicht.
Im speziellen Fall der Konvertierung in eine Zeichenfolge hat jedes Objekt eine ToString
, sodass Ihre dritte Methode möglicherweise in Ordnung ist, wenn sie o
nicht null ist und Sie der Meinung sind, dass die ToString
Methode möglicherweise das tut, was Sie wollen.