salut,
suite au conseil de transformer mes structures en classes dans un autre topic, je me suis exécuté et retrouvé fasse à un problème bizarre:
voici la classe qui était une structure
et le code l'utilisant:
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 public class Entree { private double montant; private string lieu; private string type; private string motsCle; private DateTime date; private int id; public double Montant { get { return montant; } set { montant = value;} } public string Lieu { get { return lieu; } set { lieu = value; } } public string Type { get { return type; } set { type = value; } } public string MotsCle { get { return motsCle; } set { motsCle = value; } } public DateTime Date { get { return date; } set { date = value; } } public int Id { get { return id; } set { id = value; } } }
Avec une structure, ce code fonctionne parfaitement. Si je remplace struct par class, toute ma liste vaut la dernière valeur lue dans le fichier. pourtant il ne devrais pas y avoir de différences
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 private List<Entree> tab = new List<Entree>(); public Donnees(){ if (File.Exists(fileName)) { BinaryReader binReader = new BinaryReader(File.Open(fileName, FileMode.Open)); try { // determine if the file is empty. byte[] testArray = new byte[3]; int count = binReader.Read(testArray, 0, 3); if (count != 0) { // Reset the position in the stream to zero. binReader.BaseStream.Seek(0, SeekOrigin.Begin); SeekOrigin i = SeekOrigin.Begin; Entree e = new Entree(); while (i != SeekOrigin.End)//on lit jusqu'a la fin du fichier { e.Lieu = binReader.ReadString(); e.Type = binReader.ReadString(); e.MotsCle = binReader.ReadString(); e.Montant = binReader.ReadDouble(); e.Date = DateTime.FromFileTime(binReader.ReadInt64()); e.Id = binReader.ReadInt32(); i = SeekOrigin.Current; tab.Add(e); } } } catch{ } finally { binReader.Close(); } } }
Partager