To naprawdę zależy od tego, czy wiesz, czy o
jest to łańcuch, i co chcesz z nim zrobić. Jeśli twój komentarz oznacza, że o
tak naprawdę jest to struna, wolałbym (string)o
rzut prosty - raczej nie zawiedzie.
Największą zaletą używania prostego rzutowania jest to, że gdy się nie powiedzie, otrzymujesz InvalidCastException , który mówi ci prawie, co poszło nie tak.
Z as
operatorem, jeśli o
nie jest łańcuchem, s
jest ustawiony na null
, co jest przydatne, jeśli nie masz pewności i chcesz przetestować s
:
string s = o as string;
if ( s == null )
{
// well that's not good!
gotoPlanB();
}
Jeśli jednak nie wykonasz tego testu, użyjesz go s
później i zostanie zgłoszony wyjątek NullReferenceException . Te wydają się być bardziej powszechne i wiele trudniej wytropić gdy tylko dzieje się w środowisku naturalnym, jak prawie każda linia dereferences zmienną i może rzucić jeden. Z drugiej strony, jeśli próbujesz rzutować na typ wartości (dowolny prymityw lub struktury takie jak DateTime ), musisz użyć prostego rzutowania - as
nie zadziała.
W szczególnym przypadku konwersji na ciąg, każdy obiekt ma ToString
, więc trzecia metoda może być w porządku, jeśli o
nie jest zerowa i uważasz, że ToString
metoda może zrobić to, co chcesz.