3

我注意到在使用 Visual Studio 2010 开发我的 C# 应用程序时有一个奇怪的地方。在某些情况下,据我所知,应该抛出 NullReferenceException 时不会抛出异常。相反,应用程序会继续正常运行,但会卡住,以至于我无法正常关闭它并被迫将其杀死。

例如,考虑以下情况:

public class MyControl : UserControl
{
    private SomeClass myObj;
    public MyControl()
    {
        Bar();
        myObj = new SomeClass();
    }

    public void Bar()
    {
        myObj.SomeProperty = 5; // myObj is null here but no exception gets thrown
    }
}

代码在执行时不会抛出异常,而是myObj.SomeProperty = 5;跳出函数返回到MyControl父窗体调用构造函数的位置。我可以让调试器在其他情况下捕获 NullReferenceExceptions(以及其他异常),而不是像这样。

应该在这里抛出 NullReferenceException 还是我误解了有关 C# 和/或 .NET 的一些东西?

4

2 回答 2

3

原因

在调用堆栈的某个地方,一个 try/catch 块正在包装这个异常并“优雅地”处理它。

如何查看已处理的异常

如果您真的想检查是否抛出异常,无论它是否是用户未处理的,您都需要启用菜单下的Thrown异常复选框。Common Language Runtime ExceptionsDebug > Exceptions...

重复

启用抛出异常设置,再试一次,您将收到有关异常的通知。

其他可能性

您的代码可能已过期。

于 2013-02-14T18:43:20.533 回答
2

在VS中,进入Debug->Exceptions->Common Language Runtime Exceptions,勾选Thrown,然后再试一次。它会告诉你是否在其他地方发现了异常。

于 2013-02-14T18:43:04.350 回答