<分区>
这样做更好吗:
try
{
...
}
catch (Exception ex)
{
...
throw;
}
或者这个:
try
{
...
}
catch (Exception ex)
{
...
throw ex;
}
他们做同样的事情吗?一个比另一个好吗?
<分区>
这样做更好吗:
try
{
...
}
catch (Exception ex)
{
...
throw;
}
或者这个:
try
{
...
}
catch (Exception ex)
{
...
throw ex;
}
他们做同样的事情吗?一个比另一个好吗?
最佳答案
您应该始终使用以下语法重新抛出异常。否则你会破坏堆栈跟踪:
throw;
如果打印由 throw ex
产生的跟踪,您会看到它结束于该语句,而不是异常的真正来源。
基本上,使用 throw ex
应该被视为刑事犯罪。
如果需要重新抛出来自其他地方(AggregateException、TargetInvocationException)或另一个线程的异常,您也不应该直接重新抛出它。而是有 ExceptionDispatchInfo保留所有必要的信息。
try
{
methodInfo.Invoke(...);
}
catch (System.Reflection.TargetInvocationException e)
{
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Capture(e.InnerException).Throw();
throw; // just to inform the compiler that the flow never leaves the block
}
关于c# - 在 C# 中重新抛出异常的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/178456/