6

我对字典很陌生。大约 6 小时前我开始使用它们的非常新的含义:p。无论如何,我想知道是否有办法更改字典的键。

这是我的字典:

Dictionary<string, string> Information = new Dictionary<string, string>();

这是我添加到字典的方式(每次用户输入信息并点击按钮时都会触发:

Information.Add(txtObjectNumber.Text, addressCombined);

用户需要能够编辑这两个字段以及删除整个记录。

所以几乎应用程序需要添加txtNumbertxtComments在哪里txtNumber = txtObjectNumber

感谢您的帮助。

4

5 回答 5

11

无法直接修改密钥。您必须将其删除并重新添加。

于 2012-06-13T20:58:01.950 回答
3

关键是允许您稍后找到数据(“值”)的机制。

例如,如果你做了

information.Add("Kris", "Vandermotten");

如果您知道“Kris”,您以后可以找到“Vandermotten”。

现在在这种情况下,改变“Kris”意味着什么?您将数据放在名称“Kris”下,并希望通过搜索“Bob”将其取出?你不会找到它。

在某种程度上,字典键非常类似于关系数据库中的主键。指的是值的逻辑标识。因此,一方面,他们应该唯一标识它。

所以也许这个例子没有意义。也许像

information.Add(42, new Person("Kris", "Vandermotten")

更有意义。那么问题当然是:42 是什么?有时这种键有一个自然的候选者,例如员工编号或其他东西,有时则没有。

当没有时,也许你需要做

List<Person> information = new List<Person>();

information.Add(new Person("Kris", "Vandermotten"));

当然,如果 Person 对象允许更改名字属性,而这正是您想要做的,那就去做吧。但是“更改字典键”对我来说没有多大意义。

于 2012-06-13T21:07:56.733 回答
1

您可以为您的 Dictionary 使用内置的 Remove() 方法。或者你可以通过遍历集合来完成它。虽然我很好奇为什么您需要不断更新键,而不仅仅是值。

于 2012-06-13T21:01:36.720 回答
0

您不能更改现有字典项的键。您可以做的是删除以前的键并根据编辑添加一个新的键/值。

示例用例:

添加键:名称,值:鲍勃

现在您想更改NameFirstName,您必须这样做

从字典中删除键Name添加键:名字,值:鲍勃

于 2012-06-13T20:58:58.213 回答
0

您在这里使用字典似乎有点不对劲。顾名思义,字典旨在为您提供一种基于键“查找”值的方法。但是,在您的情况下,您似乎正在使用它来存储两个相关的数据,其中任何一个都可以更改。在这种情况下,您最好只使用一个列表,并创建一个单独的类来封装这两条信息。就像是

public class MyData
{
    public string SomeData { get; set; }
    public string OtherData { get; set; }
}

进而

List<MyData> myDataList;

或者,您甚至可能想要一个将不变键(可能是用户 ID)映射到自定义类的字典:

Dictionary<string, MyData> myDataDictionary;
于 2012-06-13T21:00:06.170 回答