For Each 循环 VB.NET 中的 Fortify 扫描 Null 取消引用问题

Fortify scan Null Dereference issue at For Each loop VB.NET

我们的应用程序是用 VB.Net 编写的。 在 HP Fortify 中扫描我们的应用程序时,Null Dereference 问题指向了几个页面中唯一的 For Each ... Next 循环。 Null Reference 仅在 For each 循环中显示的原因可能是什么。在应用程序中使用 For Each 循环的所有地方,空解除引用都指向 For Each 循环的 "Next"。 请帮助解决此扫描问题。 下面是我们应用程序的示例代码片段。

If Request.QueryString("mode") IsNot Nothing Then
                        mode = Request.QueryString("mode")
                    End If
                    .
                    .
                    .
                    For Each col In gridTemp.Columns
                        Select Case col.HeaderText
                            Case "ID"
                                col.Visible = IIf(mode = "Admin", True, False)
                            Case "Name"
                                col.Visible = IIf(mode = "Admin", True, False)
                            Case "Balance"
                                col.Visible = IIf(mode = "Admin", False, True)
                            Case "Dues"
                                col.Visible = IIf(mode = "Admin", True, False)
                            Case "Contact"
                                col.Visible = IIf(mode = "Admin", False, True)
                        End Select
                    Next

我们发现解决这个问题的唯一方法是将 for each 循环转换为 for 循环。在这种情况下,请尝试使用

For I as Integer = 0 to gridTemp.Columns.Count - 1  
 Dim col as Column(i)  
 Select Case col.HeaderText  

 Case "ID"  
      col.Visible = IIf(mode = "Admin", True, False)  
 Case "Name"  
      col.Visible = IIf(mode = "Admin", True, False)  
 Case "Balance"  
      col.Visible = IIf(mode = "Admin", False, True)  
 Case "Dues"  
      col.Visible = IIf(mode = "Admin", True, False)  
 Case "Contact"  
      col.Visible = IIf(mode = "Admin", False, True)  
 End Select  
Next    

我同意,但不幸的是,这是我坚持使用的工具。另一种选择是将其标记为 "not an issue" 并解释为什么这不是问题。