Apakah semua ini sama? Dalam keadaan apa saya harus memilih masing-masing dari yang lain?
var.ToString ()
CStr (var)
CType (var, String)
DirectCast (var, String)
EDIT: Saran dari NotMyself ...
- TryCast (var, String)
Itu semua sedikit berbeda, dan umumnya memiliki penggunaan yang dapat diterima.
var.
ToString
()
akan memberi Anda representasi string dari suatu objek, apa pun jenisnya. Gunakan ini jika var
belum memiliki string.CStr
(var)
adalah operator cor string VB. Saya bukan orang VB, jadi saya sarankan menghindarinya, tapi itu tidak benar-benar akan menyakiti apa pun. Saya pikir pada dasarnya sama dengan CType
.CType
(var, String)
akan mengkonversi tipe yang diberikan ke string, menggunakan operator konversi yang disediakan.DirectCast
(var, String)
digunakan untuk melemparkan objek ke dalam string. Jika Anda tahu bahwa variabel objek sebenarnya adalah string, gunakan ini. Ini sama dengan (string)var
di C #.TryCast
(seperti yang disebutkan oleh @ NotMyself ) seperti DirectCast
, tetapi akan kembali Nothing
jika variabel tidak dapat dikonversi menjadi string, daripada melempar pengecualian. Ini sama dengan var as string
di C #. The TryCast
halaman di MSDN memiliki perbandingan yang baik, juga.
TryCast
hanya berfungsi untuk tipe nilai, karena harus tipe yang dapat memilikiNothing
nilaiCStr(var)
akan tersedak dan memunculkan eksepsi jika var adalah DBNull.Value, tetapi alternatifConvert.ToString(var)
akan mengembalikan string kosong.Dim myList AS ArrayList=new ArrayList
Ketika Anda menulis(From e In myList select CType(e.Name,String)).ToArray()
itu tidak berhasil. Saya datang untuk menulis... select CType(e.Name.ToString,String)).ToArray()
dan mengambil senyum saya.Cstr()
dikompilasi secara inline untuk kinerja yang lebih baik.CType
memungkinkan untuk gips antar jenis jika operator konversi ditentukanToString()
Antara tipe dasar dan string melempar pengecualian jika konversi tidak dimungkinkan.TryParse()
Dari String ke basetypeif
mungkin jika tidak, mengembalikan falseDirectCast
digunakan jika jenis terkait melalui pewarisan atau berbagi antarmuka umum, akan mengeluarkan pengecualian jika pemeran tidak dimungkinkan, tidaktrycast
akan mengembalikan apa pun dalam contoh inisumber
MSDN tampaknya menunjukkan bahwa gips Cxxx untuk tipe tertentu dapat meningkatkan kinerja dalam VB. NET karena mereka dikonversi ke kode inline. Untuk beberapa alasan, ini juga menyarankan DirectCast sebagai lawan dari CType dalam kasus-kasus tertentu (dokumentasi menyatakan itu ketika ada hubungan warisan; Saya percaya ini berarti kewarasan para pemain diperiksa pada waktu kompilasi dan optimisasi dapat diterapkan sedangkan CType selalu menggunakan Runtime VB.)
Ketika saya sedang menulis kode VB .NET, apa yang saya gunakan tergantung pada apa yang saya lakukan. Jika itu adalah kode prototipe yang akan saya buang, saya menggunakan apa pun yang saya ketik. Jika itu kode yang saya seriuskan, saya mencoba menggunakan para pemain Cxxx. Jika tidak ada, saya menggunakan DirectCast jika saya memiliki keyakinan yang masuk akal bahwa ada hubungan warisan. Jika ini adalah situasi di mana saya tidak tahu jika para pemain harus berhasil (input pengguna -> integer, misalnya), maka saya menggunakan TryCast untuk melakukan sesuatu yang lebih ramah daripada melemparkan pengecualian pada pengguna.
Satu hal yang saya tidak bisa goyangkan adalah saya cenderung menggunakan ToString daripada CStr tetapi seharusnya Cstr lebih cepat.
sumber
Saya lebih suka sintaks berikut:
Hah Anda bisa tahu saya biasanya menulis kode dalam C #. 8)
Alasan saya lebih suka TryCast adalah Anda tidak perlu mengacaukan overhead pengecoran pengecualian. Pemain Anda berhasil atau variabel Anda diinisialisasi ke nol dan Anda mengatasinya.
sumber
.ToString()
. Tipe nilai, seperti Integer, tidak bisa apa-apa. Jadi dalam hal ini, CStr (angka) atau angka. ToString () aman. Dalam kasus umum (bukan hanya tipe nilai), CStr (apa pun) aman, karena dapat menangani Tidak Ada - hasilnya adalah Tidak ada, dalam variabel String. TryCast sangat berguna - tidak di sini.Pengguna Konrad Rudolph mengadvokasi untuk DirectCast () di pertanyaan Stack Overflow "Fitur Tersembunyi VB.NET" .
sumber
String
, OP tidak mungkin mendiskusikan situasi di mana DirectCast sesuai.String
danToString
, keluhan saya tidak akan berlaku. Anda tidak harus mengadvokasi DirectCast, sampai Anda telah mempersempit topik dari Konversi umum.Menurut ujian sertifikasi, Anda harus menggunakan Convert.ToXXX () bila memungkinkan untuk konversi sederhana karena mengoptimalkan kinerja lebih baik daripada konversi CXXX.
sumber
Pada suatu waktu, saya ingat melihat keadaan perpustakaan MSDN untuk menggunakan CStr () karena lebih cepat. Saya tidak tahu apakah ini benar.
sumber