如何在字典C#中编辑值数据

How to edit value data in a dictionary C#

本问题已经有最佳答案,请猛点这里访问。

我有一个成员字典,其中键是一个唯一的长ID,值是一个对象,其中包含该成员的名字姓氏和其他形式的成员详细信息的数据。在C中有什么方法可以做到这一点吗?

例如

dictionary key holds memberID 0 member
id 0 name is bob lives in Italy

bob moves to England

有没有办法更新C中的字典,让他的词条显示他住在英国?


假设Member是一个类,这很简单:

1
members[0].Country ="England";

你只是在更新字典引用的对象。只需一步一步,它就相当于:

1
2
Member member = members[0];
member.Country ="England";

只有一个对象代表Bob,不管你如何检索它。

实际上,如果您已经通过不同的变量访问Member的实例,则根本不需要使用字典:

1
2
3
4
5
6
// Assume this will fetch a reference to the same object as is referred
// to by members[0]...
Member bob = GetBob();
bob.Country ="England";

Console.WriteLine(members[0].Country); // Prints England

如果Member实际上是一个结构…好吧,那么我建议你重新考虑一下你的设计,把它改成一个类:)


对于类(至少是可变类),这应该简单如下:

1
2
long theId = ...
yourDictionary[theId].Country ="England"; // fetch and mutate

对于结构(应该是不可变的;或者对于不可变的类),您需要获取、重新创建和覆盖:

1
2
3
4
long theId = ...
var oldItem = yourDictionary[theId]; // fetch
var newItem = new SomeType(oldItem.Id, oldItem.Name,"England"); // re-create
yourDictionary[theId] = newItem; // overwrite

(显然,重新创建的行需要调整到特定对象)

在易变结构的邪恶邪恶世界中(见注释),一旦它在一个变量中,你就可以变异:

1
2
3
4
long theId = ...
var item = yourDictionary[theId]; // fetch
item.Country ="England"; // mutate
yourDictionary[theId] = item; // overwrite


嗯,我不能超过马克或乔恩,但我的条目是:(我用城市而不是国家,但概念是一样的。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using System.Collections.Generic;

public class MyClass
{
    public static void Main()
    {
        var dict = new Dictionary<int, Member>();
        dict.Add(123, new Member("Jonh"));
        dict.Add(908, new Member("Andy"));
        dict.Add(456, new Member("Sarah"));

        dict[456].City ="London";

        Console.WriteLine(dict[456].MemberName  +"" + dict[456].City);
        Console.ReadKey();
    }
}

public class Member
{
    public Member(string name) {MemberName = name; City="Austin";}
    public string MemberName { get; set; }
    public string City { get; set; }
    // etc...
}

1
dictionary[memberID].Location ="Italy";