在使用Visual Studio2010开发我的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的某些方面?
发布于 2013-02-15 02:43:04
在VS中,转到Debug-> Exceptions ->Common Language Runtime Exception并检查抛出,然后重试。它将显示您是否在其他地方捕获了异常。
发布于 2013-02-15 02:43:21
Reason
在调用堆栈的某个地方,try/catch块包装了这个异常,并“优雅地”处理它。
如何查看已处理的异常
如果您真的想检查是否抛出了异常,无论它是否是用户未处理的,都需要在Debug > Exceptions...菜单下为Common Language Runtime Exceptions启用Thrown exception复选框。
Repeat
启用抛出异常设置,再试一次,您将收到有关异常的通知。
Other Possibilities
您的代码可能已过期。
https://stackoverflow.com/questions/14881746
复制相似问题