Ok je crois avoir compris.
En fait, en .NET une structure n'est pas un type référence mais un type valeur.
Dans ton cas, tu passe en argument à la fonction Calcul ta structure à modifier mais vu que l'argument est de type valeur, il est passé en argument par valeur, ce qui veut dire que la fonction Calcul va faire une copie de ta structure et travailler dessus(la structure originale n'étant pas modifiée).
La solution est d'utiliser les mot clé ref ou out pour préciser que tu veux passer ton type valeur par référence et non par valeur :
Dans ton cas :
Pour la définition de la fonction:
1 2 3 4 5 6
|
public static void Calcul(ref MyStruct myStruct)
{
int result = 999;
myStruct.J = result;
} |
et pour l'appel à Calcul :
Calcul(ref m); // Make some work and modify the J value
La différence entre ref et out est qu'avec out, on peut passer par référence une variable de type valeur qui n'a pas été initialisé.
Sinon, le meme problème se pose mais à la ligne :
MyStruct m = myDictionary["1"];
En fait, en faisant myDictionary["1"] tu accédes à ta structure mais quand tu l'affecte à la variable m par contre, ce n'est pas la structure meme que tu affectes mais une copie. Le mieux que je te conseille pour tous les problèmes que tu rencontres là est d'utiliser une classe au lieu d'une structure. Dans ce cas, plus besoin des mots clés ref et out.
Partager