Gerçekten o
bir dize olup olmadığını ve onunla ne yapmak istediğinizi bilmenize bağlıdır . o
Yorumunuz gerçekten bir dize olduğu anlamına gelirse , düz (string)o
oyuncu kadrosunu tercih ederim - başarısız olma olasılığı düşüktür.
Düz döküm kullanmanın en büyük avantajı, başarısız olduğunda, neyin yanlış gittiğini size söyleyen bir InvalidCastException almanızdır .
İle as
eğer operatör, o
bir dize değil, s
ayarlandığında null
Emin konum ve test etmek istiyorsanız kullanışlı olduğu s
:
string s = o as string;
if ( s == null )
{
// well that's not good!
gotoPlanB();
}
Ancak, bu sınamayı gerçekleştirmezseniz, s
daha sonra kullanırsınız ve bir NullReferenceException özel durumu oluşturulur . Bunlar daha yaygın olma eğilimindedir ve vahşi doğada ortaya çıktıklarında izlenmesi çok daha zordur, çünkü neredeyse her çizgi bir değişkeni dereferences ve bir tane atabilir. Öte yandan, bir değer türüne (herhangi bir ilkel veya DateTime gibi yapılar ) yayınlamaya çalışıyorsanız , düz döküm kullanmanız gerekir - as
işe yaramaz.
Bir dizeye dönüştürme özel durumunda, her nesnenin bir vardır ToString
, bu nedenle üçüncü yönteminiz o
boş değilse doğru ToString
olabilir ve yöntemin istediğinizi yapabileceğini düşünüyorsunuz .