我的代码类似于以下内容:
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语句?
答案 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抛出异常 - 你的代码就会破坏;无论是否处理。您可以单步执行代码并查看处理它的内容。