Saat mem-parsing input pengguna, umumnya disarankan untuk tidak melempar dan menangkap pengecualian melainkan menggunakan metode validasi. Di .NET BCL, ini akan menjadi perbedaan antara, misalnya, int.Parse
(melempar pengecualian pada data tidak valid) dan int.TryParse
(mengembalikan false
data tidak valid).
Saya merancang sendiri
Foo.TryParse(string s, out Foo result)
metode dan saya tidak yakin tentang nilai pengembalian. Saya bisa menggunakan metode bool
seperti .NET sendiri TryParse
, tetapi itu tidak akan memberikan indikasi tentang jenis kesalahan, tentang alasan yang tepat mengapa s
tidak dapat diuraikan menjadi Foo
. (Misalnya, s
bisa memiliki tanda kurung yang tidak cocok, atau jumlah karakter yang salah, atau Bar
tanpa yang sesuai Baz
, dll.)
Sebagai pengguna API, saya sangat tidak suka metode yang hanya mengembalikan Boolean sukses / gagal tanpa memberi tahu saya mengapa operasi gagal. Ini menjadikan debugging permainan tebak-tebakan, dan saya juga tidak ingin memaksakan itu pada klien perpustakaan saya.
Saya dapat memikirkan banyak solusi untuk masalah ini (mengembalikan kode status, mengembalikan string kesalahan, menambahkan string kesalahan sebagai parameter keluar), tetapi mereka semua memiliki kelemahan masing-masing, dan saya juga ingin tetap konsisten dengan konvensi Framework .NET .
Jadi, pertanyaan saya adalah sebagai berikut:
Apakah ada metode dalam .NET Framework yang (a) mengurai input tanpa melempar pengecualian dan (b) masih mengembalikan informasi kesalahan yang lebih terperinci daripada Boolean benar / salah sederhana?
Parse()
.