try-catch中未处理的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文件运行这个程序时,我仍然得到exception。

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

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

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

原始答案:

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