作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
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/
我是一名优秀的程序员,十分优秀!