我有一个For Each循环只迭代1个元素。它在我的测试中从32个中的第6个元素开始,恰好是comp.includeMe评估为True的元素。在执行外部if语句之后,它开始第二次迭代但退出循环并在comp.includeMe评估为false后立即返回。没有错误或警告,我已经验证组件对象中有元素。任何人都可以解释我做错了什么,以及为什么这种语法不起作用?
Public Class BOM
Public Property components as New List(Of Component)
Public Function TotalArea(ByVal adjusted As Boolean) As Double
Dim total As Double = 0
For Each comp As Component In components
If comp.includeMe = True Then
If adjusted Then
total += comp.GetAdjustedSize() * comp.quantity
Else
total += comp.area * comp.quantity
End If
End If
Next
Return total
End Function
public sub Add(byval comp as Component)
components.add(comp)
end sub
End Class
Public Class Component
Public Property quantity as Integer
Public Property area as Double
Public Property includeMe as Boolean
...
End Class
' object construction
Dim bomlist as New BOM
bomlist.add(comp)
答案 0 :(得分:1)
在深入挖掘之后,似乎foreach语句正在识别第一个if语句并且仅在值为真时才提取值。我意识到我只有一个组件,includeMe Boolean设置为true。在我将其他组件设置为true之后,我观察到For Each完全重复次数为includeMe = True的组件数
答案 1 :(得分:0)
我建议添加一些调试语句以协助调试:
Public Class BOM
Public Property components as New List(Of Component)
Public Function TotalArea(ByVal adjusted As Boolean) As Double
Dim total As Double = 0
Debug.Print(components.Count)
For Each comp As Component In components
Debug.Print(comp.includeMe)
If comp.includeMe = True Then
If adjusted Then
total += comp.GetAdjustedSize() * comp.quantity
Else
total += comp.area * comp.quantity
End If
End If
Next
Return total
End Function
public sub Add(byval comp as Component)
components.add(comp)
end sub
End Class