Jawaban:
Parse
melempar pengecualian jika tidak bisa mengurai nilai, sedangkan TryParse
mengembalikan yang bool
menunjukkan apakah itu berhasil.
TryParse
tidak hanya try
/ secara catch
internal - intinya adalah bahwa itu diimplementasikan tanpa pengecualian sehingga cepat. Faktanya, cara penerapannya kemungkinan besar adalah bahwa secara internal Parse
metode akan memanggil TryParse
dan kemudian mengeluarkan pengecualian jika kembali false
.
Singkatnya, gunakan Parse
jika Anda yakin nilainya akan valid; jika tidak gunakan TryParse
.
Jika string tidak dapat diubah menjadi integer, maka
int.Parse()
akan mengeluarkan pengecualianint.TryParse()
akan mengembalikan false (tetapi tidak membuat pengecualian)Metode TryParse memungkinkan Anda menguji apakah ada sesuatu yang dapat diurai. Jika Anda mencoba Parse seperti pada contoh pertama dengan int yang tidak valid, Anda akan mendapatkan pengecualian saat berada di TryParse, ia mengembalikan boolean yang memberi tahu Anda apakah parse berhasil atau tidak.
Sebagai catatan kaki, meneruskan null ke sebagian besar metode TryParse akan memunculkan pengecualian.
Parse melontarkan pengecualian jika konversi dari string ke jenis data yang ditentukan gagal, sedangkan TryParse secara eksplisit menghindari pelemparan pengecualian.
TryParse tidak mengembalikan nilai, ia mengembalikan kode status untuk menunjukkan apakah parse berhasil (dan tidak memunculkan pengecualian).
Sebagai catatan, saya menguji dua kode: Itu hanya mencoba untuk mengubah dari string menjadi angka dan jika gagal maka tetapkan angka ke nol.
if (!Int32.TryParse(txt,out tmpint)) {
tmpint = 0;
}
dan:
try {
tmpint = Convert.ToInt32(txt);
} catch (Exception) {
tmpint = 0;
}
Untuk c #, opsi terbaik adalah menggunakan tryparse karena alternatif try & Catch mengeluarkan pengecualian
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll
Itu menyakitkan lambat dan tidak diinginkan, bagaimanapun, kode tidak berhenti kecuali pengecualian Debug diselesaikan untuk berhenti dengannya.
Saya tahu ini posting yang sangat lama tetapi berpikir untuk membagikan beberapa detail lebih lanjut tentang Parse vs TryParse.
Saya punya skenario di mana DateTime perlu dikonversi ke String dan jika datevalue null atau string.empty kami menghadapi pengecualian. Untuk mengatasi ini, kami telah mengganti Parse dengan TryParse dan akan mendapatkan tanggal default.
Kode Lama:
dTest[i].StartDate = DateTime.Parse(StartDate).ToString("MM/dd/yyyy");
dTest[i].EndDate = DateTime.Parse(EndDate).ToString("MM/dd/yyyy");
Kode Baru:
DateTime startDate = default(DateTime);
DateTime endDate=default(DateTime);
DateTime.TryParse(dPolicyPaidHistories[i].StartDate, out startDate);
DateTime.TryParse(dPolicyPaidHistories[i].EndDate, out endDate);
Harus mendeklarasikan variabel lain dan digunakan sebagai Out for TryParse.
startDate
dan endDate
karena DateTime.TryParse
akan selalu menimpanya dengan DateTime.MinValue
. Jika representasi tanggal yang salah harus dikonversi ke nilai yang berbeda, periksa nilai yang dikembalikan DateTime.TryParse
dan jika salah, setel nilainya secara eksplisit.
DateTime?
( DateTime nullable )
double.Parse ("-"); memunculkan pengecualian, sementara double.TryParse ("-", out parsed); parsing ke 0 jadi saya kira TryParse melakukan konversi yang lebih kompleks.
TryParse
kembali true
atau false
? Begitulah cara Anda mengetahui apakah itu "valid".