我有一个成员字典,其中密钥是唯一的长ID,值是一个对象,其中包含有关该成员名称姓氏和其他形式的成员详细信息的数据。在C#中有什么方法可以做到这一点吗?
e.g
字典键包含memberID 0成员 id 0名字是bob住在意大利
鲍勃搬到英格兰
有没有办法在C#中更新字典,这样他的条目现在说他住在英国?
答案 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...
}