Lempar semula pengecualian dalaman dalam C# dan simpan surih tindanan
Dalam senario di mana pengecualian bersarang ditangkap melalui refleksi, melontar semula pengecualian dalam boleh menyebabkan maklumat surih tindanan hilang. Untuk mengatasi masalah ini, penyelesaian yang berkesan adalah dengan menggunakan kelas ExceptionDispatchInfo yang diperkenalkan dalam .NET 4.5.
Gunakan ExceptionDispatchInfo untuk mengekalkan kesan tindanan
ExceptionDispatchInfo membenarkan menangkap pengecualian dan melemparkannya semula tanpa mengubah surih tindanan. Berikut ialah contoh:
<code class="language-csharp">using ExceptionDispatchInfo = System.Runtime.ExceptionServices.ExceptionDispatchInfo; try { // 可能抛出异常的代码 } catch (Exception ex) { ExceptionDispatchInfo.Capture(ex).Throw(); }</code>
Dengan menggunakan ExceptionDispatchInfo, pengecualian dalaman boleh dibuang semula sambil mengekalkan surih tindanan asalnya. Kaedah ini berfungsi dengan mana-mana jenis pengecualian, tidak terhad kepada AggregateException.
Diperkenalkan untuk fungsi tak segerak
Kelas ExceptionDispatchInfo digunakan terutamanya untuk mengendalikan pengecualian dalam operasi tak segerak. Khususnya, ciri bahasa C# yang menunggu membuka pengecualian dalaman daripada contoh AggregateException, yang boleh menyebabkan kekeliruan dalam pengaturcaraan tak segerak. ExceptionDispatchInfo secara berkesan mengekalkan surih tindanan pengecualian dalam senario sedemikian.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melemparkan Semula Pengecualian Dalaman dalam C# Semasa Mengekalkan Jejak Tindanan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!