gpt4 book ai didi

c# - 为什么我们不能在枚举字典的键时更改字典的值?

转载 作者:IT王子 更新时间:2023-10-29 04:18:49 24 4
gpt4 key购买 nike

class Program
{
static void Main(string[] args)
{
var dictionary = new Dictionary<string, int>()
{
{"1", 1}, {"2", 2}, {"3", 3}
};

foreach (var s in dictionary.Keys)
{
// Throws the "Collection was modified exception..." on the next iteration
// What's up with that?

dictionary[s] = 1;
}
}
}

我完全理解为什么在枚举列表时会抛出这个异常。期望在枚举期间枚举对象的结构不会改变似乎是合理的。但是,更改字典的 是否也会更改其结构?具体来说,它的键的结构?

最佳答案

因为值和键是成对存储的。键和值没有单独的结构,而是将两者存储为一组对值的单个结构。当您更改一个值时,它需要更改包含键和值的单个底层结构。

改变一个值是否一定会改变底层结构的顺序?不,但这是一个特定于实现的细节和 Dictionary<TKey,TValue>类,正确地,被认为不会通过允许修改值作为 API 的一部分来揭示这一点。

关于c# - 为什么我们不能在枚举字典的键时更改字典的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1562729/

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