令人困惑的Child对象实例化

时间:2009-02-13 12:33:03

标签: .net vb.net

我有一个具有子对象(Action)的对象(Incident)。事件可能具有零个或一个Action对象。我正在尝试使用以下代码测试Incident对象是否具有子Action对象:

If Not MyIncident.Action Is Nothing

理论上这应该有效,但由于某种原因,子Action对象被神秘地实例化(没有值)。这个实例化似乎发生在If Else语句的Else行上,我在其中检查Incident对象的ID属性,以确定它是否已保存到数据库中:

If MyIncident.ID = 0 Then

  Me.cmdAddNote.Visible = False
  Me.dgvNotes.Visible = False
  Me.DefaultHitsAndMisses()

Else 
  Me.cmdAddNote.Visible = True

  If Not MyIncident.Action Is Nothing Then
    Me.cboCorrectiveActionStatus.SelectedValue =  Me.MyIncident.Action.Status.ID  
  End If
End If

MyIncident.Action在If语句的第一行是Nothing,但似乎在这个和Else行之间被实例化(在这个例子中只会执行else的情况)。

如果在填充Incident对象时需要,则实例化Action对象,如果Incident对象没有关联的Action,则显式保留Action对象未实例化。

我希望根据Action对象是否为空来建立一些逻辑,但它似乎不是一个可靠的检查。

任何人都可以对此有所了解吗?

注意:道歉但代码示例似乎不想正确标记!

3 个答案:

答案 0 :(得分:1)

你的行动是结构还是阶级?结构不能为空。

答案 1 :(得分:1)

是否使用As New定义了?或者也许是一个结构?

答案 2 :(得分:0)

哈!我试图变得聪明,实际上是愚蠢的,我的Action属性是每次调用对象时构造一个新的对象实例,并检查数据库中是否有适当的数据。如果无法加载数据,我无法将Action成员变量设置为空。我已修改该属性,如果发生这种情况则不返回任何内容,现在一切都按预期工作。我试图通过'延迟加载'Action对象来变得聪明。那会学到我的。

感谢所有提供帮助的人。