由於拋出了上述錯誤,我們有一些第三方代碼在此刻導致了一些痛苦:它有點奇怪,因爲它是一個間歇性錯誤。這是導致該問題的方法:收藏已修改;枚舉操作可能不會執行。錯誤
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