0
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 文件运行这个程序时,我仍然得到异常。

4

1 回答 1

8

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

如果您刚刚在 try/catch 块中进行了查询构造,则不会捕获执行查询时发生的异常。

查看你得到的堆栈跟踪,你会发现执行查询的地方会有一个堆栈帧——它只是来自这段代码的自动生成的 lambda 表达式,而不是在 try/catch 块的范围内运行。

原始答案:

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

于 2010-01-04T10:09:10.673 回答