Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Melemparkan Semula Pengecualian dengan betul dalam C# dan Mengekalkan Jejak Tindanan?
Kaedah melontar semula pengecualian yang betul dalam C#
Apabila mengendalikan pengecualian dalam C#, sintaks lemparan semula yang betul adalah penting untuk memastikan ketepatan surih tindanan. Walaupun beberapa teknik melontar semula kelihatan serupa, perbezaan halus boleh menjejaskan proses penyahpepijatan.
Kaedah 1:
<code class="language-csharp">try { // ...代码块... } catch (Exception ex) { // ...处理代码... throw; }</code>
Kaedah ini hanya membuang semula pengecualian yang ditangkap tanpa sebarang pengubahsuaian. Biasanya, ia lebih disukai daripada kaedah dua kerana ia mengekalkan surih tindanan asal, membolehkan pembangun mengesan pengecualian dengan tepat kepada sumbernya.
Kaedah 2:
<code class="language-csharp">try { // ...代码块... } catch (Exception ex) { // ...处理代码... throw ex; }</code>
Walaupun kaedah ini turut membuang semula pengecualian, kaedah ini mungkin mengubah surih tindanan. Dengan melemparkan pengecualian yang ditangkap secara eksplisit, ia menghasilkan bingkai tindanan baharu, mengaburkan sumber asal pengecualian, menjadikannya lebih sukar untuk menentukan punca puncanya.
Gunakan ExceptionDispatchInfo untuk membuang semula pengecualian daripada sumber lain:
Jika anda perlu melemparkan semula pengecualian daripada konteks yang berbeza (seperti pengecualian agregat atau urutan yang berasingan), anda harus menggunakan kelas ExceptionDispatchInfo
. Kelas ini menangkap maklumat yang diperlukan bagi pengecualian asal dan membenarkannya dilempar semula dalam konteks baharu sambil mengekalkan surih tindanan asalnya.
Contoh:
<code class="language-csharp">try { methodInfo.Invoke(...); } catch (System.Reflection.TargetInvocationException e) { System.Runtime.ExceptionServices.ExceptionDispatchInfo.Capture(e.InnerException).Throw(); throw; // 告知编译器代码流不会离开此代码块 }</code>
Dengan menggunakan kelas ExceptionDispatchInfo
, konteks dan surih tindanan pengecualian asal dikekalkan, membolehkan pembangun mengesan ralat ke sumbernya dengan tepat.
Atas ialah kandungan terperinci Bagaimana untuk Melemparkan Semula Pengecualian dengan betul dalam C# dan Mengekalkan Jejak Tindanan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!