우리는 위의 오류가 발생하여 현재 약간의 불행을 초래하는 제 3 자 코드가 있습니다. 이는 간헐적 인 오류이기 때문에 약간 이상합니다. 여기에 문제의 원인이되는 방법 :컬렉션이 수정되었습니다. 열거 연산이 실행되지 않을 수 있습니다. 오류
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 e 만이 Sub가 호출 됨) - removemarks가 False로 전달됩니다. - 이것은 재귀 호출을 통해 완전히 전달되므로 호출하는 행은 절대 실행되지 않습니다. .... 우리가 볼 수없는 사실 로깅은 이것을 증명합니다 ....
누구든지이 문제를 일으킬 수있는 다른 것을 볼 수 있습니까?
덕분에 모든
리처드
예. 줄을 범인처럼 생각했지만 호출 코드를 보면 매개 변수 [removemarks]가 False로 전달됩니다. 이것은 분명히 코드 라인이 결코 실행되어서는 안된다는 것을 의미합니다! – user481777