Bolehkah Pengelakan Pengecualian Asli Berlaku dalam C#?
Apabila bekerja dengan perpustakaan luaran yang tidak terurus dalam C#, adalah penting untuk mempertimbangkan kemungkinan menghadapi pengecualian asli yang berasal dari dalam perpustakaan tersebut.
Boleh Standard Try...Catch Capture Native Exceptions?
Nasib baik, C# menyediakan mekanisme untuk menangkap pengecualian asli juga. Persoalannya ialah: Bolehkah standard cuba...catch block mengendalikan pengecualian tidak terurus ini tanpa sebarang pengubahsuaian?
Jawapan: Menangkap Pengecualian Asli
Untuk menangkap pengecualian asli, anda boleh gunakan kelas Win32Exception. Ia menawarkan sifat bernama NativeErrorCode yang membolehkan anda memeriksa kod ralat dan mengendalikan kes tertentu dengan sewajarnya.
Sebagai contoh, pertimbangkan coretan kod berikut:
const int ERROR_FILE_NOT_FOUND = 2; const int ERROR_ACCESS_DENIED = 5; const int ERROR_NO_APP_ASSOCIATED = 1155; void OpenFile(string filePath) { Process process = new Process(); try { // Calls native application registered for the file type // This may throw a native exception process.StartInfo.FileName = filePath; process.StartInfo.Verb = "Open"; process.StartInfo.CreateNoWindow = true; process.Start(); } catch (Win32Exception e) { if (e.NativeErrorCode == ERROR_FILE_NOT_FOUND || e.NativeErrorCode == ERROR_ACCESS_DENIED || e.NativeErrorCode == ERROR_NO_APP_ASSOCIATED) { MessageBox.Show(this, e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } }
Dalam contoh ini, kami cuba untuk melancarkan aplikasi asli yang dikaitkan dengan jenis fail tertentu. Jika aplikasi tidak boleh dimulakan, Win32Exception dilemparkan dengan kod ralat yang berkaitan. Pernyataan if dalam blok tangkapan menyemak kod ralat tertentu dan memaparkan mesej yang sesuai.
Atas ialah kandungan terperinci Bolehkah Standard C# cuba...tangkap Blok Mengendalikan Pengecualian Asli daripada Perpustakaan Tidak Terurus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!