try-catch中未处理的异常

时间:2010-01-04 10:03:41

标签: c# exception try-catch unhandled-exception

try
{
     list = from XElement e in d.Descendants(wix + "File")
            where e.Attribute("Name").Value.Contains(temp.Name) &&
            e.Parent.Parent.Attribute("Name").Value.Contains(temp.Directory.Name)
            select e;
}
catch (NullReferenceException e)
{
     MessageBox.Show(e.Message);
}
catch (Exception e)
{
     MessageBox.Show(e.Message);
}

现在我的问题是为什么这段代码产生运行时错误,说我有一个未处理的NullReferenceException。如果您需要有关该计划的更多信息,请通知我。

编辑: 调试器指向linq语句的“where”部分。当我直接从exe文件运行这个程序时,我仍然得到例外。

1 个答案:

答案 0 :(得分:6)

编辑:好的,我想我知道这个问题......这是由于延迟查询执行造成的。

如果您只是在try / catch块中获得了查询构造,那么就不会捕获在执行查询时发生的异常

查看你已经拥有的堆栈跟踪,你会发现你将执行查询的堆栈框架 - 它只是自动生成的lambda表达式来自这段代码,并且它不在try / catch块的范围内运行。

原始回答:

您是否只是在调试器中看到异常?如果是这样,请进入调试器异常对话框并更改异常导致调试器“中断”的点的首选项。 catch块应该正常处理NullReferenceException。 (不可否认,我认为你不应该首先捕捉NullReferenceException,并且捕捉所有这样的例外通常也是一个坏主意,除了在堆栈的顶部 - 但这是另一回事。)