如何在 C# 中重新抛出 InnerException 而不丢失堆栈跟踪?
csharpserver side programmingprogramming
在 C# 中,throw 是一个关键字,在程序执行期间手动抛出异常非常有用,我们可以根据需要使用 try-catch 块来处理这些抛出的异常。
通过在 catch 块中使用 throw 关键字,我们可以重新抛出已在 catch 块中处理的异常。当我们想要将异常传递给调用者,以便他们以所需的方式处理时,重新抛出异常非常有用。
以下是在 C# 中使用 try-catch 块和 throw 关键字重新向调用者抛出异常的示例。
示例
class Program{ static void Main(string[] args){ try{ Method2(); } catch (System.Exception ex){ System.Console.WriteLine($"{ex.StackTrace.ToString()} {ex.Message}"); } Console.ReadLine(); } static void Method2(){ try{ Method1(); } catch (System.Exception){ throw; } } static void Method1(){ try{ throw new NullReferenceException("Null Exception error"); } catch (System.Exception){ throw; } } }
这就是我们如何根据我们的要求使用 catch 块中的 throw 关键字向调用者重新抛出异常的方法。
输出
at DemoApplication.Program.Method1() in C:\Users\Koushik\Desktop\Questions\ConsoleApp\Program.cs:line 49 at DemoApplication.Program.Method2() in C:\Users\Koushik\Desktop\Questions\ConsoleApp\Program.cs:line 37 at DemoApplication.Program.Main(String[] args) in C:\Users\Koushik\Desktop\Questions\ConsoleApp\Program.cs:line 24 Null Exception error