일부 조건에 따라 반복하고 항목을 변경하는 데 필요한 간단한 Dictionary(of String, Object)
이 있습니다.루프 내에서 콜렉션 변경
반복되는 컬렉션을 수정할 수 없으므로 어떻게해야합니까?
컬렉션이 수정 된
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
잘못된 연산 예외;
예를 들어은 분명히 다음은 Invalid Operation Exception
원인 열거 연산이 실행되지 않을 수 있습니다.
사전을 먼저 복제하고 복사본을 반복해야합니까? 그 일을하는 가장 좋은 방법은 무엇입니까?
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
그래도 약간의 냄새가납니다.
나는 내가하는 일이라고 생각 ... 그렇지 않으면 당신은 그것을 할 수있는 사용자 정의는 IEnumerable을 만들 수 있습니다 몰라 이것은 잘못된 길 주위에. 열쇠 만이 아니라 값이 필요한 열쇠가 필요합니다. 그러나 접근법은 잘 작동합니다. 루프의 맨 위에있는 원래 콜렉션에서 현재 val을 얻습니다. – Cylindric