代码之家  ›  专栏  ›  技术社区  ›  Christopher B. Adkins

Try Catch中未处理的异常

  •  0
  • Christopher B. Adkins  · 技术社区  · 15 年前
    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 回复  |  直到 15 年前
        1
  •  6
  •   Jon Skeet    15 年前

    编辑:好吧,我想我知道问题所在…这是因为延迟了查询的执行。

    如果你已经 只是 在try/catch块中获取了查询构造,这不会捕获发生的异常 执行查询时 .

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

    原始答案:

    您只是在调试器中看到异常吗?如果是这样,请进入调试器异常对话框,并更改异常导致调试器“中断”的点的首选项。挡块应处理 NullReferenceException 通常情况下。(不可否认,我认为你不应该真的抓住 空引用异常 首先,抓住 全部的 这样的异常通常也是一个坏主意,除了在堆栈的顶部之外——但这是另一回事。)

    推荐文章