关于c#:字典中的键是< TKey,TValue>

Are the keys in a Dictionary<TKey, TValue> immutable?

我从API中得到一个Dictionary,但根据某些规则,需要修改一些键名。

在我开始复制新的Dictionary之前,我只想确认Dictionary中的键是不变的。


更像是您必须确保用于TKey的类型是不可变的,如果它是引用类型的话。顺便说一下,字符串是不可变的。值类型可以是可变的,但您没有机会修改Dictionary中存储的密钥。


您是对的,如果密钥发生更改,则需要用旧密钥删除条目,并用新密钥插入新条目。

如果只有部分键发生更改,则不需要复制整个词典。Dictionary上的添加和删除操作大致都是O(1)操作。


字典中的键不可变。

例如,以下代码:

1
2
3
4
5
6
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("One","1");
dict.Add("Two","2");

var k = dict.First();
k.Key ="Three";

将引发以下编译器错误:

0

也就是说,如果使用引用类型,字典可能具有可变键,请参见:

字典和可变键

(我知道,我知道,字符串是引用类型…但上面的链接将解释…)