Es hängt wirklich davon ab, ob Sie wissen, ob oes sich um eine Zeichenfolge handelt und was Sie damit machen möchten. Wenn Ihr Kommentar bedeutet, dass es sich owirklich wirklich um eine Zeichenfolge handelt, würde ich die gerade (string)oBesetzung 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.
asWenn der Operator okeine Zeichenfolge ist, swird er auf gesetzt. nullDies 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 sspä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 asfunktioniert 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 onicht null ist und Sie der Meinung sind, dass die ToStringMethode möglicherweise das tut, was Sie wollen.