Saya ingin mencoba mengubah string menjadi Guid, tetapi saya tidak ingin bergantung pada menangkap pengecualian (
- karena alasan kinerja - pengecualian mahal
- untuk alasan kegunaan - debugger akan muncul
- untuk alasan desain - yang diharapkan tidak luar biasa
Dengan kata lain kodenya:
public static Boolean TryStrToGuid(String s, out Guid value)
{
try
{
value = new Guid(s);
return true;
}
catch (FormatException)
{
value = Guid.Empty;
return false;
}
}
tidak cocok.
Saya akan mencoba menggunakan RegEx, tetapi karena panduan dapat dibungkus tanda kurung, dibungkus kurung, tidak ada yang dibungkus, membuatnya sulit.
Selain itu, saya pikir nilai Guid tertentu tidak valid (?)
Perbarui 1
ChristianK punya ide bagus untuk menangkap saja FormatException
, daripada semua. Mengubah contoh kode pertanyaan untuk menyertakan saran.
Perbarui 2
Mengapa khawatir tentang pengecualian yang dilemparkan? Apakah saya benar-benar mengharapkan GUID tidak valid sesering itu?
Jawabannya adalah ya . Itulah mengapa saya menggunakan TryStrToGuid - Saya sedang mengharapkan data yang buruk.
Contoh 1 Ekstensi ruang nama dapat ditentukan dengan menambahkan GUID ke nama folder . Saya mungkin parsing nama folder, memeriksa untuk melihat apakah teks setelah final . adalah GUID.
c:\Program Files
c:\Program Files.old
c:\Users
c:\Users.old
c:\UserManager.{CE7F5AA5-6832-43FE-BAE1-80D14CD8F666}
c:\Windows
c:\Windows.old
Contoh 2 Saya mungkin menjalankan server web yang banyak digunakan ingin memeriksa validitas beberapa data yang diposkan kembali. Saya tidak ingin data yang tidak valid mengikat sumber daya 2-3 pesanan lebih besar dari yang seharusnya.
Contoh 3 Saya mungkin mem-parsing ekspresi pencarian yang dimasukkan oleh pengguna.
Jika mereka memasukkan GUID, saya ingin memprosesnya secara khusus (seperti mencari objek itu secara khusus, atau menyorot dan memformat istilah pencarian tertentu dalam teks respons.)
Perbarui 3 - Tolok ukur kinerja
Uji konversi 10.000 Panduan yang baik, dan 10.000 Panduan yang buruk.
Catch FormatException:
10,000 good: 63,668 ticks
10,000 bad: 6,435,609 ticks
Regex Pre-Screen with try-catch:
10,000 good: 637,633 ticks
10,000 bad: 717,894 ticks
COM Interop CLSIDFromString
10,000 good: 126,120 ticks
10,000 bad: 23,134 ticks
ps saya tidak perlu membenarkan pertanyaan.
4.0
. Itu sebabnya pertanyaan, dan jawaban yang diterima, adalah cara mereka.