首先,我可以在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表达式。
什么可能导致这种情况?
答案 0 :(得分:1)
第一个函数的最后一行添加ownerControl
,第一次调用它时为null,因此它向列表添加Nothing。在你的lambda中你正在做一个c.Name
,当c
为Nothing时会抛出异常。