Vb.net visualbasic中的块作用域
在下面的代码中,我试图根据InspectionKey将一个变量(bestInsp)设置为集合(Inspections)中的最新变量 我在for循环中使用了print语句,发现该循环工作正常。但是,当我尝试在For循环之外使用bestInsp变量时,它不会保留我设置的值。根据我的研究,我认为这是一个块作用域问题,解决方案是在For循环之外初始化变量(我已经这样做了),但它仍然不起作用。有什么是我忽略的吗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
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语句之外,它没有保留值。你可以…只发布代码,我不明白为什么会出现问题。很抱歉