了解throw ex和throw之间的区别,为什么在这个例子中保留了原始的StackTrace:
在两种情况下,人们都期望看到初始化y的行号。
static void Main(string[] args)
{
try
{
LongFaultyMethod();
}
catch (System.Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}
static void LongFaultyMethod()
{
try
{
int x = 20;
SomethingThatThrowsException(x);
}
catch (Exception)
{
throw;
}
}
static void SomethingThatThrowsException(int x)
{
int y = x / (x - x);
}
但在这一个中不行:
static void Main(string[] args)
{
try
{
LongFaultyMethod();
}
catch (System.Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}
static void LongFaultyMethod()
{
try
{
int x = 20;
int y = x / (x - 20);
}
catch (Exception)
{
throw;
}
}
第二种情况会产生与 "throw ex" 相同的输出吗?在两种情况下,人们都期望看到初始化y的行号。
catch(Exception ex)
处理一组异常类型,然后测试ex
是否是一些特定类型中的一个,并对这些类型进行常规处理)。 - Sam Harwell