【发布时间】:2021-03-30 03:18:42
【问题描述】:
还有一些其他问题涉及到这个主题,但似乎没有一个能解决它(或者,它们太复杂了,我无法理解......)
我有一个:
Private MCDevices As New Dictionary(Of IPAddress, MCDeviceInfo)
在这个Dictionary 中,IPAddress 是键(显然),MCDeviceInfo 是在别处定义的Classes。所以基本上是Dictionnary(Of IPAddress, Class)。
我想通过MCDevices Dictionary 循环一个For ... Next,并在该循环中更改MCDeviceInfo Classes 的内容:在循环中,我更改KVP 的值 ,但没有以任何方式在循环中添加、更改或删除IPAddress,我仔细检查了这一点。
For Each kvp As KeyValuePair(Of IPAddress, MCDeviceInfo) In MCDevices
' Some code changing the contents of the MCDeviceInfo but not the IPAddress
Next
仍然,到达Next,我得到了:
**System.InvalidIperationException:** 'Collection was modified; enumeration operation may not continue'.
这里的条件可能非常乐观,因为代码就停在那里...
有没有办法解决这个问题?为什么只要键不受影响,我就不能更改值?
【问题讨论】:
-
For ... Next, notFor Each ... Next-- 你有办法将MCDeviceInfo对象与IpAddress键相关联吗?还是盲目的更改(只是更改MCDeviceInfo中的值,与Key 无关)? -
如果你想改变一个集合的值,这个问题可能会对你有所帮助:How to iterate through Dictionary and change values? - 但它在 C# 中
-
这是一个盲目的变化。
MCDeviceInfo类甚至包含它们自己的 IP 地址字段,因此我确信我不必修改KVP的Key。For...Next可能有效,但看起来我必须将Dictionary转换为SortedList,否则,我似乎无法通过 IPAddress 找到项目。 -
@JayV :我现在更加努力地将您提供的链接的 C# 转换为 VB,这似乎有效。我将发布我的 VB 代码作为答案(明天)-谢谢。
-
“在循环中,我更改了 KVP 的值”。这实际上是什么意思?这是否意味着您更改了已经存在的对象的属性,或者是否意味着您用不同的对象替换了该对象。它们是两个非常不同的东西。也许在导致问题的循环中显示实际代码。如果您想解决问题,最好显示导致问题的代码。
标签: vb.net dictionary for-loop collections invalidoperationexception