J'essaye d'utiliser la méthode ArrayList.Contains() mais je ne comprends pas pourquoi cette méthode ne renvoie pas true sur deux objets égaux (j'entend par la deux objets ayant une référence différente mais un contenu identique).
Je ne sais pas si je suis très clair, donc voilà ce que ca donne. J'ai une classe Days :
Je crée plusieurs instances de cette classe que je stocke dans une ArrayList nommée selectedDays. Je stocke également plusieurs instances de cette classe dans un tableau à deux dimensions nommé monthDays.
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 public class Days { int wkDay; Rectangle dayRect; public Days(Rectangle rect, int d) { dayRect = rect; wkDay = d; } public Rectangle DayRect { get { return dayRect; } } public int WkDay { get { return wkDay; } } }
Je parcours ensuite l'intégralité de mon tableau et vérifie si chacun des éléments qu'il contient existe déjà dans mon ArrayList SelectedDays, pour cela j'utilise la méhode Contains() de mon ArrayList, le code de parcours de mon tableau avec la comparaison des deux instances de Days :
C'est la ligne if (selectedDays.Contains(monthDays[i,j])) qui me pose problème car lors d'un debug en pas a pas selectedDay contient bien une instance de Days ayant exactement le même contenu que l'instance de Days dans monthDays[i,j], pourtant SelectedDays.Contains() me renvoie false... pourquoi ? normalement cela équivaut à un équals non ? cela voudrait donc dire que c'est bien les contenus qui sont comparés et non les référence donc pourquoi ce false...
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 for (int i = 0; i <= 5; i++) { for (int j = 0; j <= 6; j++) { Rectangle rect = new Rectangle(xPos, yPos, colWidth, lineHeight); g.DrawRectangle(new Pen(gridBorderColor), xPos, yPos, colWidth, lineHeight); monthDays[i, j] = new Days(new Rectangle(xPos, yPos, colWidth, lineHeight), firstWeekOfMonth[j].Day); if (selectedDays.Contains(monthDays[i,j])) { g.FillRectangle(new SolidBrush(Color.FromArgb(selectedDayBgColorAlpha, selectedDayBgColor)), rect); } else { g.FillRectangle(new SolidBrush(dayBgColor), rect); } g.DrawString(firstWeekOfMonth[j].Day.ToString(), dayNumberFont, new SolidBrush(dayNumberColor), rect); xPos += colWidth; } if (xPos + colWidth > Width) { yPos += lineHeight; xPos = 0; } for (int j = 0; j <= firstWeekOfMonth.Length - 1; j++) { firstWeekOfMonth[j] = firstWeekOfMonth[j].AddDays(7); } }
Merci de votre aide
Partager