Bonjour. De provenance C++, je suis manifestement un peu à la peine dans la manipulation des concepts C# (d'objets Struct et d'objets class en C#), le plus simple, je me permets de vous mettre mon code puis je vous explique :
Mes questions :
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 public class forum { //déclarations (variables, structure Struct Result, etc, déclaration consturcteurs //... //méthodes static public void doWork() { double[,] tmpRes = new double[m, 2]; //stockage temporaire des données int n = 10, m = 100; myResults = new List<Result>(m); for (int i = 0; i < m; ++i) myResults.Add(new Result(n)); //initialisation de la liste Result myResult__ = new Result(n);//déclaration de la variable locale temporaire nécessaire pour l'affectation des données struct et éviter erreur CS1612 double x__, y__; Hashtable metaData = new Hashtable(); foreach (var kvp in myKeyValuePair) { Result myResults__ = new Result(n);//déclaration de la variable locale temporaire nécessaire pour l'affectation des données struct for (int i = 0; i < _nbSimulations; ++i) { for (int j = 0; j < m; ++j) { x__ = uneFonction(); y__ = autreFonction(); tmpRes[j, 0] += x__; tmpRes[j, 1] += y__; } } for (int j = 0; j < m; ++j) { tmpRes[j, 0] *= tmpRes[j, 1]; tmpRes[j, 1] /= tmpRes[j, 0]; myResults__.x = tmpRes[j, 0]; myResults__.y = tmpRes[j, 1]; myResults[j] = myResult__; } metaData.Add(kvp.idx(), myResults); } return; } }
1. Pourquoi ne m'a ti-l pas été permis par le compilo (le type Result est vous l'aurez compris une "struct"), dans mes boucles, d'affecter directement mes valeurs calculées à la variable : myResults.x (ou myResult.y) ? J'ai pour contourner, dû storer mes valeurs dans les membres d'une struct intermédiaire avant de charger myresults.
2. Plus gênant, dans le code ci-dessus où je dois ranger mes résultats dans une "List<Result> metaData" je me retrouve à la fin de mes boucles, toujours la même valeur pour toutes mes clés de List, un peu comme ci les éléments de la listes avaient tous pointés sur la même adresse mémoire, laquelle adresse mémoire contient naturellement en fin de boucle, les valeurs de myresults__ telles qu'à la dernière itération dans la boucle.
Je ne comprends vraiment pas ce qui cloche dans ce code ni ce que je dois comprendre. Ce que je sais c'est que je m'arrache les cheveux. Merci donc pour le secours que vous pourrez m'apporter.
Partager