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

时间:2010-12-11 20:14:52

标签: c# dictionary

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

e.g

  

字典键包含memberID 0成员   id 0名字是bob住在意大利

     鲍勃搬到英格兰

有没有办法在C#中更新字典,这样他的条目现在说他住在英国?

4 个答案:

答案 0 :(得分:6)

假设Member(或其他)是一个类,它很简单:

members[0].Country = "England";

您只是更新字典引用的对象。只是为了逐步完成它,它相当于:

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

只有一个代表Bob的对象,并且无论你如何检索它。

事实上,如果您已经可以通过其他变量访问Member实例,则根本不需要使用字典:

// 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 :(得分:4)

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

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

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

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

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

在可变结构的邪恶邪恶世界中(见注释),你可以在变量中变异:

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

答案 2 :(得分:1)

dictionary[memberID].Location = "Italy";

答案 3 :(得分:1)

好吧,我不能对Marc或Jon进行编码,但这里是我的参赛作品:(我使用的是City而不是Country,但概念是相同的。)

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...
}