2010-12-11 35 views
3

J'ai un dictionnaire de membres où la clé est un ID long unique et la valeur est un objet qui contient des données sur ce nom de famille et d'autres formes de détails de membre. Y a-t-il moyen en C# que cela puisse être fait?Comment modifier les données de valeur dans un dictionnaire C#

par exemple

clé dictionnaire contient MemberID 0 membre id 0 nom vit bob en Italie

bob se déplace en Angleterre

est-il un moyen de mettre à jour le dictionnaire en C# alors que son entrée dit maintenant qu'il vit en Angleterre?

+0

Sans connaître les arguments génériques du type de dictionnaire, et les types qu'ils représentent, non, nous ne pouvons pas vous aider. – cdhowie

Répondre

6

En supposant que Member (ou autre) est une classe, il est simple:

members[0].Country = "England"; 

Vous mettez à jour tout l'objet le dictionnaire a une référence à. Juste à l'étape à travers elle, il est équivalent à:

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

Il n'y a qu'un seul objet représentant Bob, et il n'a pas d'importance comment vous le récupérer.

En fait, si vous avez déjà accès à l'instance de Member par une autre variable, vous n'avez pas besoin d'utiliser le dictionnaire du tout:

// 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 

Si Member est en fait une struct ... eh bien, je vous suggère de repenser votre conception, et ce qui en fait une classe à la place :)

4

Pour les classes (au moins, ceux qui sont mutable) cela devrait être aussi simple que:

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

Pour structs (qui devrait être immuable; ou encore pour les classes immuables), vous devrez chercher, recréer et remplacer:

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

(évidemment les besoins en ligne de recréer peaufinage à vos objets particuliers)

Dans le monde du mal mal de mutables struct (voir les commentaires), vous pouvez muter une fois qu'il est dans une variable:

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

Juste pour info, vous n'avez pas besoin de recréer la structure si elle est mutable. – cdhowie

+3

@cdhowie sshhh. Ne dites pas aux gens qu'il existe des structures mutables. La prochaine personne que je vois agiter autour d'une structure mutable va être * battue * avec elle. –

+0

@cdhowie a ajouté quelques notes à ce sujet; ça fait? –

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

Eh bien, je ne peux pas OUTCODE Marc ou Jon, mais voici mon entrée: (je Ville au lieu de Pays mais le concept est le s ame.)

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