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文件运行这个程序时,我仍然得到例外。
答案 0 :(得分:6)
编辑:好的,我想我知道这个问题......这是由于延迟查询执行造成的。
如果您只是在try / catch块中获得了查询构造,那么就不会捕获在执行查询时发生的异常。
查看你已经拥有的堆栈跟踪,你会发现你将执行查询的堆栈框架 - 它只是自动生成的lambda表达式来自这段代码,并且它不在try / catch块的范围内运行。
原始回答:
您是否只是在调试器中看到异常?如果是这样,请进入调试器异常对话框并更改异常导致调试器“中断”的点的首选项。 catch块应该正常处理NullReferenceException
。 (不可否认,我认为你不应该首先捕捉NullReferenceException
,并且捕捉所有这样的例外通常也是一个坏主意,除了在堆栈的顶部 - 但这是另一回事。)