我在学习《C#与.NET 3.5高级程序设计》中关于结构化异常处理一章中遇到这样一个内部异常的问题:他说在处理其他异常的时候触发另一个异常。代码示例如下: try
{
for (int i = 0; i < 10; i++)
{
myCar.Accelerate(10);
}
}
catch (CarIsDeadException e)
{
try
{
FileStream fs = File.Open(@"d:\carError.txt", FileMode.Open);
fs.Close();
}
catch (Exception e2)
{
throw new CarIsDeadException(e.Message, e2);
}
}可我在运行的时候,总是在
throw new CarIsDeadException(e.Message, e2);
这一句出错,提示为“未处理CarIsDeadException”;这是怎么回事呢?我没看明白,这个异常应该由谁来处理,怎么处理。
{
for (int i = 0; i < 10; i++)
{
myCar.Accelerate(10);
}
}
catch (CarIsDeadException e)
{
try
{
FileStream fs = File.Open(@"d:\carError.txt", FileMode.Open);
fs.Close();
}
catch (Exception e2)
{
throw new CarIsDeadException(e.Message, e2);
}
}可我在运行的时候,总是在
throw new CarIsDeadException(e.Message, e2);
这一句出错,提示为“未处理CarIsDeadException”;这是怎么回事呢?我没看明白,这个异常应该由谁来处理,怎么处理。
改成 messagebox.show(e.message,e2);
注意你抛出异常是在 catch 块中,不是 try 块中。应改写如下:try
{
for (int i = 0; i < 10; i++)
{
myCar.Accelerate(10);
} try
{
FileStream fs = File.Open(@"d:\carError.txt", FileMode.Open);
fs.Close();
}
catch (Exception e2)
{
throw new CarIsDeadException(e.Message, e2);
}
}
catch (CarIsDeadException e)
{
// 在这里处理你自己抛出的 CarIsDeadException ...
}
如果你希望自己抛出的异常得到处理,必须把它放到一个 try 代码块中,而不是 catch 代码块。
显然你原来的代码中没有编写任何代码来处理你自己抛出的异常。
你已经定义了捕捉类型,要考虑没有捕捉到的错误。