Vb.net visualbasic中的块作用域

Vb.net visualbasic中的块作用域,vb.net,scope,Vb.net,Scope,在下面的代码中,我试图根据InspectionKey将一个变量(bestInsp)设置为集合(Inspections)中的最新变量 我在for循环中使用了print语句,发现该循环工作正常。但是,当我尝试在For循环之外使用bestInsp变量时,它不会保留我设置的值。根据我的研究,我认为这是一个块作用域问题,解决方案是在For循环之外初始化变量(我已经这样做了),但它仍然不起作用。有什么是我忽略的吗 Dim res As Result Dim insp As Hansen.CDR.Buildi

在下面的代码中,我试图根据InspectionKey将一个变量(bestInsp)设置为集合(Inspections)中的最新变量

我在for循环中使用了print语句,发现该循环工作正常。但是,当我尝试在For循环之外使用bestInsp变量时,它不会保留我设置的值。根据我的研究,我认为这是一个块作用域问题,解决方案是在For循环之外初始化变量(我已经这样做了),但它仍然不起作用。有什么是我忽略的吗

Dim res As Result
Dim insp As Hansen.CDR.Building.IInspection
Dim bestInsp As Hansen.CDR.Building.IInspection
Dim oldKey As Integer = 0
Dim bestKey As Integer = 0
AddMaxFee = False

For Each insp In oBldgApp.Inspections
  If insp.InspectionType.Code = "Foundation" Then
    If insp.InspectionResult.Code.Length > 0 Then
      oldKey = insp.InspectionKey
      If oldKey >= bestKey Then
        bestKey = oldKey
        bestInsp = insp
      End If
    End If
  End If
Next

If bestInsp.InspectionResult.Code.ToUpper = "FAILED" Then
  AddMaxFee = True
End If
编辑:我通过删除解决了这个问题

Dim bestInsp As Hansen.CDR.Building.IInspection

并重新添加它。我猜我的编译器只是搞糊涂了?

因为
bestInsp
是在For循环之外声明的,所以当循环退出时,它将保留分配给它的任何值(不是块范围问题)。是下面的
If
语句没有给您带来意外的结果吗?当我在最后一个If语句之前的下一个(for循环外部)之后运行print语句时,它说bestInsp为空(没有设置值)。因此,最终的If语句失败,因为bestInsp.InspectionResult.Code=Nothing当For循环中的检查未按预期触发时,将bestInsp设置为Nothing。在那里再放一些Debug.Print()语句,看看发生了什么。您可能有一些出乎意料的数据……当我在打印bestInsp.InspectionResult.Code的“bestInsp=insp”后面添加Print()语句时,它有一个值。您认为我应该在for循环结束之前尝试在If语句之外添加print语句吗?编辑:我把print语句放在循环中,但在If语句之外,它没有保留值。你可以…只发布代码,我不明白为什么会出现问题。很抱歉