C# 如何检查属性值变为“null”的原因

C# 如何检查属性值变为“null”的原因,c#,winforms,visual-studio-2005,C#,Winforms,Visual Studio 2005,我有一处这样的房产 当我调试时,我可以看到m_displayType变为null。有人能告诉我怎么去查它背后的原因吗?我检查了除此之外的所有DisplayType引用。在属性setter中放置一个断点并查看调用堆栈。您需要在setter中放置一个断点…这将给出值是否为null在setter中设置一个断点。转到断点窗口调试->窗口->断点。右键单击断点并选择条件。。。。“添加值=空”和“左为真”。 ,因为SETER中的值可能为NULL,您可能会考虑将其设置为NULL。 m_displayType

我有一处这样的房产


当我调试时,我可以看到m_displayType变为null。有人能告诉我怎么去查它背后的原因吗?我检查了除此之外的所有DisplayType引用。在属性setter中放置一个断点并查看调用堆栈。

您需要在setter中放置一个断点…这将给出值是否为null

在setter中设置一个断点。转到断点窗口调试->窗口->断点。右键单击断点并选择条件。。。。“添加值=空”和“左为真”。

,因为SETER中的值可能为NULL,您可能会考虑将其设置为NULL。

m_displayType != value
考虑到上面的行,如果value为null,而m_displayType不是,则满足条件,m_displayType=value将等效于m_displayType=null

至于如何调试它,正如其他人所说,设置一个断点选择适当的行并按F9,我相信-然后运行并逐步完成代码,这将允许您逐行见证执行,并准确地看到什么是null以及它是如何应用于m_displayType的


还有一种可能性是m_displayType被设置在其他地方:由于受到保护,这意味着继承者可以直接操作该值,那么,您是否找到了对属性的基础变量的所有引用并进行了相应的检查?

除了调试它并查看堆栈以查看调用DisplayType的位置外,您还需要确保没有使用m_DisplayType字段而不是属性来更改值。您可以在m_displayType字段和displayType属性上查找VS中的所有引用,以查看它们的使用位置。另外,是否有理由将m_displayType字段定义为受保护而非私有

你的意思是如果m_displayType!=值并检查调用堆栈??请确保您告诉我们哪一行变为空。它是在类型m_displayType line中还是在set或get中?我确认了它为空,我需要找到它背后的原因,这就是我的目的。你是正确的,可能我需要将m_displayType字段检查为protected而不是private,但要检查这一点,让我尝试一下没有特殊检查来查看它是否受保护。您可以通过上面的代码清楚地看到受保护类型m_displayType=typeofManagedDevice;它是受保护的。我的问题是为什么它是受保护的,而不是设置为私有的?如果您打算从继承的类而不是ControlType更改DisplayType值,那么这就是将其作为保护对象的原因。在这种情况下,您必须检查修改m_displayType字段的继承类。