大家好,我很难理解为什么有些代码会崩溃。有问题的说明是这样的:
首先尝试:
bool aers = vm_SessionTab.IncrementalConstruction; // != null
bool chua = IncrementalCB.Checked; // != null
if (aers) IncrementalCB.CheckState = CheckState.Checked; // crash, null reference exception
第二次尝试:
bool aers = vm_SessionTab.IncrementalConstruction; // != null
bool chua = IncrementalCB.Checked; // != null
IncrementalCB.Checked = vm_SessionTab.IncrementalConstruction //crash, null reference exception
IncrementalCB是一个CheckBox。 vm_SessionTab是一个个性化对象,包含我想要显示的状态。 当我介入调试器时,我发现“aers”和“chua”是空的。然后在接下来的两次尝试中程序崩溃告诉我它发生了一个空引用异常。我在问这是怎么回事。我明确检查两个值是否为null,即:S。完整的代码相当大,但这些是相关的。
更多信息:
我确定IncrementalCB是!= null但是如果我在我显示的代码之前创建了另一个复选框,那么抛出没有异常并且控件显示正确。为什么我需要重新创建控件,如果它已经存在? 这有效:
IncrementalCB = new CheckBox(); //i think this is unnecesary, it exists.
bool aers = vm_SessionTab.IncrementalConstruction;
bool chua = IncrementalCB.Checked;
if (aers) IncrementalCB.CheckState = CheckState.Checked;
编辑以添加...
谢谢大家建议我看看堆栈跟踪。在那我看到我正在制造的可怕错误。在伪代码浏览中,这是我的错误:(我尝试应用MVVP模式)
Call the View Constructor
Create the Presenter that manage the view.
at the end of the Presenter constructor i callback a method to show in the View the basic UI elements.
callback: .
in the view i load differents UI elements ... presenter contructor not yet finalized
i modify the value of the checkbox, trying to do it ...
directly.
ERROR->the modification is not realized directly and the ...
event handler of the Checked_Changed event is raised.
The presenter has te responsability to perform ...
the change, but.................................> ... presenter constructor not yet finalized
因此,当尚未完成的演示者被要求完成更改时,结果是Null引用异常。由于我没有访问内部Checked字段来进行直接更改而没有引发Checked_Changed事件,我需要移出回调。 这个错误有点难以看到,因为当我在调试器中使用f11跳转时,事件的事件处理程序的调用没有显示,所以我只看到直到每个对象都处于良好执行状态的行他们的行动
答案 0 :(得分:2)
看起来IncrementalCB
是null
。当您尝试执行代码时是否已初始化?
答案 1 :(得分:1)
当您尝试访问其CheckState
属性时,Checked
变量似乎为null:
CheckState.Checked