Tôi đang gọi, thông qua sự phản chiếu, một phương pháp có thể gây ra một ngoại lệ. Làm thế nào tôi có thể vượt qua ngoại lệ cho người gọi của tôi mà không có sự phản ánh wrapper đặt xung quanh nó? Tôi đang rethrowing InnerException, nhưng điều này phá hủy các dấu vết stack. mã ví dụ:Trong C#, làm thế nào tôi có thể tính toán lại InnerException mà không làm mất dấu vết ngăn xếp?
public void test1()
{
// Throw an exception for testing purposes
throw new ArgumentException("test1");
}
void test2()
{
try
{
MethodInfo mi = typeof(Program).GetMethod("test1");
mi.Invoke(this, null);
}
catch (TargetInvocationException tiex)
{
// Throw the new exception
throw tiex.InnerException;
}
}
Có một cách khác để thực hiện việc này không yêu cầu bất kỳ voodoo nào. Hãy xem câu trả lời ở đây: http://stackoverflow.com/questions/15668334/preserving-exceptions-from-dynamically-invoked-methods –
Ngoại lệ được ném trong phương pháp được gọi là động là ngoại lệ bên trong của "Ngoại lệ có được ném bởi mục tiêu của một lời kêu gọi "ngoại lệ. Nó có dấu vết ngăn xếp của riêng nó. Có thực sự là không có nhiều người khác phải lo lắng về. – ajeh