不抛的例外?

时间:2012-06-06 09:18:27

标签: c# .net exception

我的代码类似于以下内容:

try{
    func1();
}
catch(Exception e){
    /Do something
}


static func1(){
    func2();
}

static func2(){
    //Exception thrown here
    System.IO.StreamReader file = new System.IO.StreamReader(filePath);
}

当func2()中的代码行抛出异常时,我在catch子句中没有得到通知。我没有明确地抛出任何东西,我只是有静态的常规函数​​声明 - 没有“throw”出现在任何地方。

为什么异常不会向上传播到catch语句?

2 个答案:

答案 0 :(得分:6)

不,代码很好。您的真实代码中有一些内容您没有向我们展示。该异常传播良好:

using System;

static class Program {
    static void Main() {
        try{
            func1();
        } catch(Exception e) {
            // works fine: FileNotFoundException
            Console.WriteLine(e);
        }
    }
    static void func1(){
        func2();
    }    
    static void func2() {
        string filePath = "doesnot.exist";
        System.IO.StreamReader file = new System.IO.StreamReader(filePath);
    }
}

考生:

  • 涉及try的任何内容都是可疑的 - 高音检查
  • 涉及线程的任何事情都可能在其他地方有例外

答案 1 :(得分:1)

异常将“冒泡”,直到它被抓住或崩溃你的应用程序。

最好的办法是使用调试器。确保将其设置为停止在HANDLED异常(调试/异常/检查公共语言运行时异常上的'Thrown'框)。

现在运行你的代码。如果func2抛出异常 - 你的代码就会破坏;无论是否处理。您可以单步执行代码并查看处理它的内容。