-1

1 つの要素のみを反復する For Each ループがあります。私のテストでは、32 個の要素のうち 6 番目の要素から始まり、たまたま comp.includeMe が True と評価される要素です。外側の if ステートメントが実行された後、2 回目の繰り返しが開始されますが、ループを終了し、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)
4

2 に答える 2

1

もう少し掘り下げてみると、foreach ステートメントは最初の if ステートメントを認識しており、それが true の場合にのみ値を取得しているようです。includeMe Boolean が true に設定されたコンポーネントが 1 つしかないことに気付きました。他のコンポーネントも true に設定した後、For Each が includeMe = True のコンポーネントの数とまったく同じ回数反復することを観察しました

于 2013-08-19T21:18:10.153 に答える
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
于 2013-08-19T21:11:58.683 に答える