1

我有类似于以下的代码:

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 子句中没有收到任何通知。我没有明确地抛出任何东西,我只是有常规的静态函数声明——没有“抛出”出现在任何地方。

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

4

2 回答 2

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);
    }
}

候选人:

  • 任何涉及 a的东西try都是可疑的 - 高音检查它
  • 任何涉及线程的东西都可能在其他地方出现异常
于 2012-06-06T09:27:01.317 回答
1

异常会“冒泡”,直到它被捕获或使您的应用程序崩溃。

最好的选择是使用调试器。确保将其设置为在 HANDLED 异常上停止(调试/异常/检查公共语言运行时异常上的“抛出”框)。

现在运行您的代码。如果 func2 抛出异常 - 您的代码将中断;不管处理与否。您可以单步执行代码并查看处理它的内容。

于 2012-06-06T09:30:04.217 回答