这个LINQ代码有什么问题?

时间:2012-10-17 14:26:19

标签: vb.net winforms linq vb.net-2010

首先,我可以在Control上展平所有控件:

Protected Function GetAllControls(Optional ownerControl As Control = Nothing) As IEnumerable(Of Control)

    Dim ret = New List(Of Control)()
    For Each child As Control In If(ownerControl, Me).Controls
        ret.AddRange(GetAllControls(child))
    Next
    ret.Add(ownerControl)
    Return ret

End Function

然后,我想使用以下代码隐藏控件上的某些按钮:

Dim buttons = GetAllControls().Where(Function(c) c.Name.StartsWith("subButton"))
For Each ctrl As Control In buttons
    ctrl.Visible = False
    Debug.WriteLine("Hid button " & ctrl.Name)
Next

然而,在隐藏了四个按钮 - 正确的计数之后,我得到一个NullReferenceException,VS2012突出显示lambda表达式。

什么可能导致这种情况?

1 个答案:

答案 0 :(得分:1)

第一个函数的最后一行添加ownerControl,第一次调用它时为null,因此它向列表添加Nothing。在你的lambda中你正在做一个c.Name,当c为Nothing时会抛出异常。