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; }
        }
    }
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
Sortie Console :
24
0
Result of modifications : 0
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.

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
"Cannot modify a value type return value of "... Dictionary<...,...>. Consider storing the value in a temporary variable"
... ce que je tente de faire donc.

Une idée du pourquoi je n'arrive pas à modifier ma variable J ?

Merci d'avance pour votre réponse,

++
thegitch