Bonjour à tous,
Je me trouve devant un problème que je n'arrive pas à résoudre, j'espère que vous pourrez m'aider
J'ai réduit le problème à un petit programme simple, histoire d'avoir l'essentiel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 namespace XmlNodeTest { class MainClass { public static void Main(string[] args) { Dictionary<string, MyStruct> myDictionary = new Dictionary<string, MyStruct>(); myDictionary.Add("1", new MyStruct(24)); Console.WriteLine(myDictionary["1"].I); // I wait for 24 Console.WriteLine(myDictionary["1"].J); // I wait for 0 MyStruct m = myDictionary["1"]; // Take the reference, through the dictionary, to the struct I just created Calcul(m); // Make some work and modify the J value Console.WriteLine("Result of modifications : "+myDictionary["1"].J); // Want to see the result : I wait for 999 but 0 !!! } public static void Calcul(MyStruct myStruct) { int result = 999; myStruct.J = result; } } public struct MyStruct { private int i; private int j; public MyStruct(int i) { this.i = i; j = 0; } public int I { get { return i; } set { i = value; } } public int J { get { return j; } set { j = value; } } } }Mon problème est le suivant : Je créé un Dictionary avec un string comme clé et un MyStruct (que je créé moi-même) en valeur. J'ajoute une paire de clé/valeur à mon dictionnaire ("1", new MyStruct(24)) et je consulte les deux variables de mon struct (I et J) Jusque là, impeccable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Sortie Console : 24 0 Result of modifications : 0
Mon but est, par la suite, quelques temps plus tard, de retrouver la référence de ce struct par sa clé (MyStruct m = myDictionary["1"]) et de pouvoir modifier la valeur de I ou de J par une méthode de Calcul (Calcul(m)). Le code se compile mais à l'exécution, quand je vérifie la valeur de J après sa "modification", je retrouve 0 et je ne sais pas pourquoi.
C'est peut-être un problème de référence mais d'une part je ne sais pas où et d'une autre part je ne saurais pas pourquoi, tout semble logique pourtant
Et si j'essaye de modifier la valeur par une commande plus "rapide", du genre myDictionary["1"].J = 999, le code ne se compile tout simplement pas et m'affiche l'erreur... ce que je tente de faire donc."Cannot modify a value type return value of "... Dictionary<...,...>. Consider storing the value in a temporary variable"
Une idée du pourquoi je n'arrive pas à modifier ma variable J ?
Merci d'avance pour votre réponse,
++
thegitch
Partager