Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Melemparkan Semula Pengecualian Dalaman dalam C# Semasa Mengekalkan Jejak Tindanan?

Bagaimanakah Saya Boleh Melemparkan Semula Pengecualian Dalaman dalam C# Semasa Mengekalkan Jejak Tindanan?

Barbara Streisand
Barbara Streisandasal
2025-01-17 07:21:10989semak imbas

How Can I Rethrow Inner Exceptions in C# While Preserving the Stack Trace?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn