大家可能都知道,使用这种方式在C#中捕获并重新抛出异常是不好的,因为它会破坏堆栈跟踪:
try
{
if(dummy)
throw new DummyException();
}
catch (DummyException ex)
{
throw ex;
}
在不丢失堆栈跟踪的情况下重新抛出异常的正确方法是:
try
{
if(dummy)
throw new DummyException();
}
catch (DummyException ex)
{
throw;
}
唯一的问题是我收到了很多编译警告:“变量'ex'已声明但从未使用”。如果你有很多这样的警告,有用的警告可能会被隐藏在垃圾中。所以,我做了这个:
try
{
if(dummy)
throw new DummyException();
}
catch (DummyException)
{
throw;
}
catch(AnotherException ex)
{
//handle it
}
这种方法似乎是可行的,但我想知道重新抛出未设置变量的异常是否有任何缺点。.net如何处理这种情况?
提前感谢。
编辑: 我已经稍微修改了我的代码,以更清楚地表达我的意思,因为有些人误解了。
throw
和throw ex
的区别,但并没有在方法中生成异常、捕获该异常、再次抛出异常。我希望是这样的。 - AllenG