我有一个简单的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
Run Code Online (Sandbox Code Playgroud)
修改了无效的操作异常集合; 枚举操作可能无法执行.
我想我需要首先克隆字典并迭代副本?这样做的最佳方法是什么?
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
Run Code Online (Sandbox Code Playgroud)
虽然闻起来有点味道.
您可以迭代密钥的副本而不是迭代KeyValuePairs.
For Each K as String in mOptions.Keys.ToArray()
Dim Val As Object = GetSomeOtherObjectBasedOnTheOption(K)
mOptions(K) = Val
Next
Run Code Online (Sandbox Code Playgroud)
(对不起,如果你不能只是粘贴它 - 我通常不写VB)
它并不一定是一个数组:例如,你可以做VB的等价物foreach (string k in new List<string>(mOptions.Keys)).
如果迭代原始密钥并修改字典,则会出现相同的错误.
| 归档时间: |
|
| 查看次数: |
1377 次 |
| 最近记录: |