上記のエラーが発生するため、現時点でいくつかの不幸を引き起こすサードパーティ製のコードがあります。断続的なエラーであるため、やや奇妙です。コレクションが変更されました。列挙操作が実行されないことがあります。エラー
Private Shared Sub IntLocateDictionaries(ByVal haystack As ExpDictionary,
ByVal needlearray() As Object, _
ByVal resultarray() As Object, ByVal removemarks As Boolean)
Dim i As Integer
Dim item As Object
For i = 0 To UBound(needlearray)
If haystack.Exists(needlearray(i)) Then
resultarray(i)(CStr(resultarray(i).Count + 1)) = haystack
If removemarks Then
ExpandIT.FileLogger.LogError("*********** REMOVING From HAYSTACK - COULD CAUSE EXCEPTION! ***************")
haystack.Remove(needlearray(i))
End If
End If
Next
' Scan for sub dictionaries
For Each item In haystack.Values
If TypeName(item) = "ExpDictionary" Then
IntLocateDictionaries(item, needlearray, resultarray, removemarks)
End If
Next
End Sub
...これは、呼び出し元のラインである:ここでは、問題を引き起こしている方法がある
currencyproducts = New ExpDictionary
priceproducts = New ExpDictionary
IntLocateDictionaries(info, New Object() {"_cc", "_csp"}, New Object() {currencyproducts, priceproducts}, False)
私は、このエラーは通常、列挙しながら、コレクションを変更しようとすることで引き起こされることを理解しますそのため、コレクションを変更するような唯一の行にログを追加したのはなぜですか?
ログを追加して以来、問題はまだ発生していますが、ログは表示されません。これは、あなたは呼び出し側の行のパラメータを調べます(thこのSubが呼び出された場所のみ) - removemarksはFalseとして渡されます。これは再帰呼び出しの途中まで渡され、.Removeを呼び出す行は決して実行されません....表示されない事実ログはこれを証明します....
この問題を引き起こす可能性のある他の人は誰でも見ることができますか?
おかげで、すべての
リチャード
はい...私はその行が犯人のように見えていましたが、呼び出しコードを見ると、パラメータ[removemarks]はFalseとして渡されます。これは確かに、コード行が決して実行されないことを意味します! – user481777