【问题标题】:Null check always returns null, if removed returns Object reference not set to an instance of an object空检查总是返回空,如果删除返回对象引用未设置为对象的实例
【发布时间】:2010-06-24 07:56:36
【问题描述】:

我有一些代码通过 GetChildren 函数获取菜单的子项,该函数采用 menuData 列表:

Dim builtMenu As New List(Of MenuData)(_rawData.FindAll(Function(item) item.GroupingID = 0))

For Each menuData As MenuData In builtMenu
             If menuData.Children IsNot Nothing Then
            menuData.Children.AddRange(GetChildren(menuData))
             End If
        Next

如果我检查 menudata.children 是否不是什么,它总是什么都不是,因为 GetChildren 函数尚未运行(提供确实存在的子项)。如果我删除此检查并仅使用此代码:

Dim builtMenu As New List(Of MenuData)(_rawData.FindAll(Function(item) item.GroupingID = 0))

For Each menuData As MenuData In builtMenu  
            menuData.Children.AddRange(GetChildren(menuData)) 
        Next

然后我看到一个对象引用未设置为 menuData.Children.AddRange(GetChildren(menuData)) 上的对象错误的实例

请您告诉我如何解决这个问题? 非常感谢

【问题讨论】:

    标签: vb.net list function nullreferenceexception object-reference


    【解决方案1】:

    您的 menuData.Children 从未被实例化,因此它是一个空 (Nothing) 引用。

    使用前需要先实例化:

    Dim builtMenu As New List(Of MenuData)(_rawData.FindAll(Function(item) item.GroupingID = 0))
    menuData.Children = New List(Of MenuData)
    
    For Each menuData As MenuData In builtMenu  
        menuData.Children.AddRange(GetChildren(menuData)) 
    Next
    

    【讨论】:

    • 关于添加 menuData.Children = New List(Of MenuData) 我得到一个对非共享成员的引用需要一个对象引用
    • @Phil - 不知道menuData.Children 是如何实现的,我真的无能为力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 2021-10-15
    • 2011-08-10
    • 2017-06-28
    • 2014-12-28
    • 2020-03-02
    相关资源
    最近更新 更多