Itu benar-benar tergantung pada apakah Anda tahu apakah oitu string dan apa yang ingin Anda lakukan dengannya. Jika komentar Anda obenar-benar benar-benar string, saya lebih suka yang lurus (string)o- itu tidak mungkin gagal.
Keuntungan terbesar menggunakan straight cast adalah ketika gagal, Anda mendapatkan InvalidCastException , yang memberi tahu Anda apa yang salah.
Dengan asoperator, jika obukan string, sdiatur ke null, yang berguna jika Anda tidak yakin dan ingin menguji s:
string s = o as string;
if ( s == null )
{
// well that's not good!
gotoPlanB();
}
Namun, jika Anda tidak melakukan tes itu, Anda akan menggunakannya snanti dan melempar NullReferenceException . Ini cenderung lebih umum dan jauh lebih sulit untuk dilacak begitu mereka terjadi di alam liar, karena hampir setiap baris referensi variabel dan mungkin melemparkan satu. Di sisi lain, jika Anda mencoba melakukan cast ke tipe nilai (primitif, atau struct seperti DateTime ), Anda harus menggunakan cast langsung - yang astidak akan berfungsi.
Dalam kasus khusus konversi ke string, setiap objek memiliki ToString, jadi metode ketiga Anda mungkin baik-baik saja jika otidak nol dan Anda berpikir ToStringmetode tersebut dapat melakukan apa yang Anda inginkan.