我有一個簡單的Dictionary(of String, Object)
,我需要遍歷並根據某些條件更改項目。從循環內更改集合
由於我無法修改我正在迭代的集合,我該如何實現這一點?
例如,顯然下面的導致Invalid Operation Exception
:
Dim mOptions As New Dictionary(of String, Object)
mOptions.Add("optA", "A")
mOptions.Add("optB", "B")
mOptions.Add("optC", "C")
For Each O As KeyValuePair(Of String, Object) In mOptions
Dim Val As Object = GetSomeOtherObjectBasedOnTheOption(O.Key, O.Value)
mOptions(O.Key) = Val
Next
無效運算異常
集合已修改;枚舉操作可能不會執行。
我想我需要首先克隆字典並迭代副本?這樣做的最好方法是什麼?
Dim TempOptions As New Dictionary(of String, Object)
For Each O As KeyValuePair(Of String, Object) In mOptions
TempOptions.Add(O.Key, O.Value)
Next
For Each O As KeyValuePair(Of String, Object) In TempOptions
Dim Val As Object = GetSomeOtherObjectBasedOnTheOption(O.Key, O.Value)
mOptions(O.Key) = Val
Next
雖然聞起來有點。
我覺得自己做得這是錯誤的方式。我需要鍵和值,而不僅僅是鍵,但你的方法工作正常 - 我只是從循環頂部的原始集合中獲取當前val。 – Cylindric 2010-04-13 16:37:02