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 文件运行该程序时,我仍然遇到异常。
编辑:好的,我想我知道问题所在......这是由于延迟查询执行造成的。
如果你有just在 try/catch 块中获取查询构造,这不会捕获发生的异常当查询正在执行时.
查看您获得的堆栈跟踪,您会发现您所在的位置有一个堆栈帧执行查询 - 它只是来自这段代码的自动生成的 lambda 表达式,并且它不在 try/catch 块的范围内运行。
原答案:
您只是在调试器中看到异常吗?如果是这样,请进入调试器异常对话框并更改异常导致调试器“中断”的点的首选项。 catch 块应该处理NullReferenceException
通常情况下。 (诚然,我认为你不应该真正抓住NullReferenceException
首先,并抓住all像这样的异常通常也是一个坏主意,除了在堆栈顶部 - 但那是另一回事。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)