我在学习《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”;这是怎么回事呢?我没看明白,这个异常应该由谁来处理,怎么处理。

解决方案 »

  1.   

    把throw new CarIsDeadException(e.Message, e2);
    改成 messagebox.show(e.message,e2);
      

  2.   

    抛出异常,throw new Exception
      

  3.   

    IDE 不会撒谎,你确实没有处理你抛出的异常。
    注意你抛出异常是在 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 ...
    }
      

  4.   

    异常时一层一层往外抛得你看下 你的 外面一层try 有没有抛?你只是在里面的try抛了,而外面的异常没有处理
      

  5.   

    大家可能没看明白,我是在catch块中处理异常的时候又抛出一个异常,这个异常该怎么处理。
      

  6.   

    你没看到我的回复吗?
    如果你希望自己抛出的异常得到处理,必须把它放到一个 try 代码块中,而不是 catch 代码块。
    显然你原来的代码中没有编写任何代码来处理你自己抛出的异常。
      

  7.   

    catch (CarIsDeadException e)
    你已经定义了捕捉类型,要考虑没有捕捉到的错误。