Dictionary中的键是?不可变的?

发布于 2024-09-27 00:18:41 字数 198 浏览 1 评论 0原文

我从 API 返回一个 Dictionary,但根据某些规则需要修改一些键名称。

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

I get a Dictionary<string, string> back from an API but depending on certain rules need to modify some of the key names.

Before I head down the road of copying to a new Dictionary I just wanted to confirm that the keys in a Dictionary<TKey, TValue> are immutable.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

几度春秋 2024-10-04 00:18:41

你是对的,如果密钥发生变化,您将需要删除旧密钥的条目并插入新密钥的新条目。

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

You are right, if the key changes, you will need to remove the entry with the old key and insert a new entry with the new key.

If only some of the keys change, you don't need to copy the entire dictionary. Both Add and Remove operations on Dictionary are roughly O(1) operations.

傲世九天 2024-10-04 00:18:41

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

It is more like that you have to make sure that the type you use for TKey is immutable if it is a reference type. String is immutable, by the way. Value types can be mutable, but you don't get the opportunity to modify the stored key in the Dictionary.

拧巴小姐 2024-10-04 00:18:41

字典中的键是不可变的。

例如,以下代码:

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

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

将抛出以下编译器错误:

属性或索引器
'System.Collections.Generic.KeyValuePair.Key'
无法分配给--它已被读取

如此,Dictionary如果您使用引用类型,可能具有可变键,请参阅:

C# Dictionary< ;>和可变键

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

The keys in a Dictionary<string, string> are immutable.

For instance, the following code:

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

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

Will throw the following compiler error:

Property or indexer
'System.Collections.Generic.KeyValuePair.Key'
cannot be assigned to -- it is read
only

That being said, a Dictionary<T, T> may have mutable keys if you use a reference type, see:

C# Dictionary<> and mutable keys

(I know, I know, strings are reference types... but the link above will explain...)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文