我声明了一个Dictionary类型对象,并尝试在其中添加一些项目.但我甚至不能修改项目的价值.密钥不应该是可修改的,但为什么不是值?谢谢.
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("1", "bob");
dict.Add("2", "jack");
dict.Add("3", "wtf");
foreach (string key in dict.Keys)
{
dict[key] = "changed"; //System.InvalidOperationException: Collection was modified
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*sen 14
字典本身并不是一成不变的.但是在foreach循环中枚举它时你无法更改字典.
这里有一个进一步阅读的链接:为什么C#foreach语句中的迭代变量是只读的?
你使用的术语是不可变的错误.它通常用于内部状态初始化后不会改变的对象.这Dictionary<TKey, TValue>是可变的.当有人试图在枚举期间修改异常时,它会抛出异常,这是一种明确实现的行为.
您可能会混淆为什么只更改值时枚举会发生变化.其他答案尚未涵盖这一点.
那么,当你这样做的时候
dict[key] = "something";
Run Code Online (Sandbox Code Playgroud)
枚举会改变,如果该键不不存在,因为它会在这种情况下被添加,导致枚举改变.当然,如果密钥已经存在,字典实现可以首先检查并允许修改,但我想它遵循早期失败的原则,经常失败以改善应用程序的整体完整性.
| 归档时间: |
|
| 查看次数: |
4299 次 |
| 最近记录: |