Jawaban:
Parsemelempar pengecualian jika tidak bisa mengurai nilai, sedangkan TryParsemengembalikan yang boolmenunjukkan apakah itu berhasil.
TryParsetidak hanya try/ secara catchinternal - intinya adalah bahwa itu diimplementasikan tanpa pengecualian sehingga cepat. Faktanya, cara penerapannya kemungkinan besar adalah bahwa secara internal Parsemetode akan memanggil TryParsedan kemudian mengeluarkan pengecualian jika kembali false.
Singkatnya, gunakan Parsejika 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.
startDatedan endDatekarena DateTime.TryParseakan selalu menimpanya dengan DateTime.MinValue. Jika representasi tanggal yang salah harus dikonversi ke nilai yang berbeda, periksa nilai yang dikembalikan DateTime.TryParsedan 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.
TryParsekembali trueatau false? Begitulah cara Anda mengetahui apakah itu "valid".