gpt4 book ai didi

.net - OrderedDictionary 在 .NET 4 中发生了重大变化?

转载 作者:行者123 更新时间:2023-12-04 16:28:01 28 4
gpt4 key购买 nike

前几天,我的一位同事在我们将项目升级到 .NET 4 时遇到了这个问题。

鉴于以下代码:

 var od = new System.Collections.Specialized.OrderedDictionary();

od.Add("key1", "value1");
od.Add("key2", "value2");

foreach (System.Collections.DictionaryEntry entry in od)
{
od[entry.Key] = null;
}

在 .NET 3.5 中,将条目设置为 null 可以正常工作。正如预期的那样,键仍然在字典中,它的匹配值将为空。

在 .NET 4.0 中,这会抛出一个 InvalidOperationException 说

Collection was modified; enumeration operation may not execute.



我想也许 OrderedDictionary 发生了变化,其中将条目设置为 null 会完全删除它,但是做一个快速测试表明,当您将其设置为 null 时,该条目仍然存在。

这是一个尚未报告的重大变化吗?

最佳答案

你发现了一个突破性的变化。在以前版本的 OrderedDictionary 中,内部OrderedDictionaryEnumerator类使用数组索引来遍历数组。只要没有删除或添加项目,它就不会提示。

新版本使用数组本身通过 GetEnumerator 返回的底层枚举器。 ,这就是您看到代码失败的原因。

话虽如此,这只是一个从一开始就不应该奏效的重大变化。以任何方式修改您正在枚举的集合都是完全非法的,无论是通过 foreach循环或使用 IEnumerator明确地。您发现的是一个已修复的错误。

关于.net - OrderedDictionary 在 .NET 4 中发生了重大变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5159289/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com