我有这样的属性
调试后,我可以看到m_displayType
成为null
。谁能告诉我如何检查背后的原因?我检查了DisplayType
以外的所有参考文献,除了我错过了。
答案 0 :(得分:2)
在属性设置器中放置一个断点并查看调用堆栈。
答案 1 :(得分:0)
你需要在setter ....中设置一个断点,它将给出值是否为null
答案 2 :(得分:0)
在setter中设置断点。转到断点窗口(Debug-> Windows-> Breakpoints)。右键单击断点并选择“Condition ...”。添加“value == null”并选中“Is true”。
答案 3 :(得分:0)
由于setter中的value
可能是null
,您可能会认为您将其设置为null。
m_displayType != value
考虑到上述行,如果value
为null
且m_displayType
不是,则符合条件且m_displayType = value
等同于m_displayType = null
。
关于如何调试它,正如其他人所说,设置一个断点(选择合适的行并按 F9 ,我相信) - 然后运行并逐步执行代码,这将允许你逐行见证执行,看看 的确切内容以及如何将其应用于m_displayType
。
还有可能在其他地方设置m_displayType
:它受保护这意味着继承者可以直接操作该值,因此您是否找到了对该属性的基础变量的所有引用并相应地检查它们?
答案 4 :(得分:0)
除了调试它并查看堆栈以查看调用DisplayType的位置之外,还需要确保不使用m_displayType字段而不是属性来更改值。您可以在m_displayType字段和DisplayType属性中查找VS中的所有引用,以查看它们的使用位置。另外,有没有理由将m_displayType字段定义为protected而不是private?