Gerçekten obir dize olup olmadığını ve onunla ne yapmak istediğinizi bilmenize bağlıdır . oYorumunuz gerçekten bir dize olduğu anlamına gelirse , düz (string)ooyuncu 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 aseğer operatör, obir dize değil, sayarlandığında nullEmin 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, sdaha 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 - asişe yaramaz.
Bir dizeye dönüştürme özel durumunda, her nesnenin bir vardır ToString, bu nedenle üçüncü yönteminiz oboş değilse doğru ToStringolabilir ve yöntemin istediğinizi yapabileceğini düşünüyorsunuz .