Itu benar-benar tergantung pada apakah Anda tahu apakah o
itu string dan apa yang ingin Anda lakukan dengannya. Jika komentar Anda o
benar-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 as
operator, jika o
bukan string, s
diatur 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 s
nanti 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 as
tidak akan berfungsi.
Dalam kasus khusus konversi ke string, setiap objek memiliki ToString
, jadi metode ketiga Anda mungkin baik-baik saja jika o
tidak nol dan Anda berpikir ToString
metode tersebut dapat melakukan apa yang Anda inginkan.