Bonjour,

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
Public Class Bouteille
 
    Private _Identifiant As Integer
    Private _Marqueur As Integer
    Private _Emplacement As String
    Private _Couleur As String
    Private _Region As String
    Private _Etiquette As String
    Private _Millesime As UShort
    Private _Accompagnement As List(Of String)
    Private _TempsDeGarde As Byte = 0
    Private _Tolerance As Byte = 1
    Private _Prix As Byte
    Private _Observation As String
    Private _Note As Byte = 0
    Private _Exclure As Boolean = False
 
    ''' <summary>
    ''' Obtiens ou Détermine l'Identifiant de la Bouteille.
    ''' </summary>
    <XmlAttribute("Identifiant")>
    Public Property Identifiant() As Integer
        Get
            Return _Identifiant
        End Get
        Set(value As Integer)
            If value <= 0 Then Throw New ArgumentException("L'Identifiant doit être supérieur à Zéro")
            _Identifiant = value
        End Set
    End Property
 
    ''' <summary>
    ''' Obtiens ou Détermine le Marqueur de la Bouteille.
    ''' </summary>
    <XmlAttribute("Marqueur")>
    Public Property Marqueur() As Integer
        Get
            Return _Marqueur
        End Get
        Set(value As Integer)
            If value <= 0 Then Throw New ArgumentException("Le Marqueur doit être supérieur à Zéro")
            _Marqueur = value
        End Set
    End Property
 
    ''' <summary>
    ''' Obtiens ou Détermine la Position de la Bouteille.
    ''' </summary>
    <XmlAttribute("Emplacement")>
    Public Property Emplacement() As String
        Get
            Return _Emplacement
        End Get
        Set(value As String)
            If String.IsNullOrWhiteSpace(value) Then Throw New ArgumentException("Veuillez renseigner l'Emplacement de la Bouteille")
            _Emplacement = value
        End Set
    End Property
 
    ''' <summary>
    ''' Obtiens ou Détermine la Couleur de la Bouteille.
    ''' </summary>
    Public Property Couleur() As String
        Get
            Return _Couleur
        End Get
        Set(value As String)
            If String.IsNullOrWhiteSpace(value) Then Throw New ArgumentException("Veuillez renseigner la Couleur du vin.")
            _Couleur = value
        End Set
    End Property
 
    ''' <summary>
    ''' Obtiens ou Détermine la Region de la Bouteille.
    ''' </summary>
    Public Property Region() As String
        Get
            Return _Region
        End Get
        Set(value As String)
            If String.IsNullOrWhiteSpace(value) Then Throw New ArgumentException("Veuillez renseigner la Région du vin.")
            _Region = value
        End Set
    End Property
 
    ''' <summary>
    ''' Obtiens ou Détermine l'Etiquette de la Bouteille.
    ''' </summary>
    Public Property Etiquette() As String
        Get
            Return _Etiquette
        End Get
        Set(value As String)
            If String.IsNullOrWhiteSpace(value) Then Throw New ArgumentException("Veuillez renseigner l'étiquette.")
            _Etiquette = value
        End Set
    End Property
 
    ''' <summary>
    ''' Obtiens ou Détermine le Millesime de la Bouteille.
    ''' </summary>
    Public Property Millesime() As String
        Get
            Return _Millesime.ToString
        End Get
        Set(value As String)
            If String.IsNullOrWhiteSpace(value) Then Throw New ArgumentException("Veuillez renseigner le Millésime.")
            If Not String.IsNullOrWhiteSpace(value) And value.Length <> 4 Then Throw New ArgumentException("Le Millésime doit contenir seulement 4 chiffres. Ex : 2009")
            _Millesime = value
        End Set
    End Property
 
    ''' <summary>
    ''' Obtiens l'Accompagnement de la Bouteille.
    ''' </summary>
    <XmlArray("Accompagnements")>
    <XmlArrayItem("Accompagnement")>
    Public ReadOnly Property Get_Accompagnement() As List(Of String)
        Get
            Return _Accompagnement
        End Get
    End Property
 
    ''' <summary>
    ''' Détermine l'Accompagnement de la Bouteille.
    ''' </summary>
    <XmlArray("Accompagnements")>
    <XmlArrayItem("Accompagnement")>
    Public WriteOnly Property Set_Accompagnement() As String
        Set(value As String)
            If String.IsNullOrWhiteSpace(value) Then Exit Property
            If Not _Accompagnement.Contains(value) Then _Accompagnement.Add(value)
        End Set
    End Property
 
    ''' <summary>
    ''' Obtiens ou Détermine le Temps de Garde de la Bouteille.
    ''' </summary>
    Public Property TempsDeGarde() As Byte
        Get
            Return _TempsDeGarde
        End Get
        Set(value As Byte)
            If value < 0 Then Throw New ArgumentException("Le Temps de garde ne peut être négatif")
            _TempsDeGarde = value
        End Set
    End Property
 
    ''' <summary>
    ''' Obtiens ou Détermine la Tolérance.
    ''' </summary>
    Public Property Tolerance() As Byte
        Get
            Return _Tolerance
        End Get
        Set(value As Byte)
            If value < 0 Then Throw New ArgumentException("La Tolérance ne peut être négatif")
            _Tolerance = value
        End Set
    End Property
 
    ''' <summary>
    ''' Obtiens ou Détermine le Prix de la Bouteille.
    ''' </summary>
    Public Property Prix() As Byte
        Get
            Return _Prix
        End Get
        Set(value As Byte)
            If value < 0 Then Throw New ArgumentException("Le Prix ne peut être négatif")
            _Prix = value
        End Set
    End Property
 
    ''' <summary>
    ''' Obtiens ou Détermine la Qualité de la Bouteille.
    ''' </summary>
    <XmlAttribute("Qualite")>
    Public Property Qualite() As Byte
        Get
            Return _Note
        End Get
        Set(value As Byte)
            If value < 0 Or value > 5 Then Throw New ArgumentException("La Valeur de la Qualité doit se situer entre 0 et 5.")
            _Note = value
        End Set
    End Property
 
    ''' <summary>
    ''' Obtiens ou Détermine l'Observation de la Bouteille.
    ''' </summary>
    Public Property Observation() As String
        Get
            Return _Observation
        End Get
        Set(value As String)
            _Observation = value
        End Set
    End Property
 
    ''' <summary>
    ''' Obtiens ou Détermine la Position de la Bouteille.
    ''' </summary>
    <XmlAttribute("Exclure")>
    Public Property Exclure() As Boolean
        Get
            Return _Exclure
        End Get
        Set(value As Boolean)
            _Exclure = value
        End Set
    End Property
 
 
 
    ''' <summary>
    ''' Crée une Nouvelle Bouteille.
    ''' </summary>
    Public Sub New()
        _Accompagnement = New List(Of String)
        Dim XValeur As New Random
        _Identifiant = XValeur.Next
    End Sub
 
    ''' <summary>
    ''' Crée une Nouvelle Bouteille.
    ''' </summary>
    ''' <param name="Emplacement">Emplacement de la Bouteille</param>
    Public Sub New(Emplacement As String)
        If IsNothing(Emplacement) Or String.IsNullOrWhiteSpace(Emplacement) Then Throw New ArgumentException("Emplacement de la Bouteille non déterminé." & Chr(13) & "Veuillez contacter le développeur.")
        _Accompagnement = New List(Of String)
        Dim XValeur As New Random
        _Identifiant = XValeur.Next
        _Emplacement = Emplacement
    End Sub
 
    ''' <summary>
    ''' Retourne la Couleur en fonction de l'état de la Bouteille.
    ''' </summary>
    Public Function Get_Etat() As Color
        If (_Millesime + _TempsDeGarde) > Date.Now.Year Then
            Return Color.Red
        ElseIf (_Millesime + _TempsDeGarde + _Tolerance) <= Date.Now.Year Then
            Return Color.Black
        Else
            Return Color.Green
        End If
    End Function
 
    ''' <summary>
    ''' Détermine si l'accompagnement spécifié fait partie de la liste
    ''' </summary>
    Public Function Est_Accompagnement(ListValeur As List(Of String)) As Boolean
        For Each UnAccompagnement In ListValeur
            If _Accompagnement.Contains(UnAccompagnement.Trim) Then Return True
        Next
        Return False
    End Function
 
    ''' <summary>
    ''' Retourne une copie de la Bouteille.
    ''' </summary>
    Public Function Copy() As Bouteille
        Dim UneBouteille As New Bouteille()
        UneBouteille.Couleur = _Couleur
        UneBouteille.Region = _Region
        UneBouteille.Etiquette = _Etiquette
        UneBouteille.Millesime = _Millesime
        If _Accompagnement.Count <> 0 Then
            For x = 0 To _Accompagnement.Count - 1
                UneBouteille.Set_Accompagnement = _Accompagnement.Item(x).ToString()
            Next
        End If
        UneBouteille.TempsDeGarde = _TempsDeGarde
        UneBouteille.Tolerance = _Tolerance
        UneBouteille.Prix = _Prix
        UneBouteille.Observation = _Observation
        Return UneBouteille
    End Function
 
    ''' <summary>
    ''' Retourne la surcharge du ToString de la Bouteille.
    ''' </summary>
    Public Overrides Function ToString() As String
        Dim Valeur As Integer = (_Millesime + _TempsDeGarde) - Date.Now.Year
        If Valeur > 0 Then
            Return String.Format("{0} ,{1} ,{2} , de {3} - [{4}€], Tdg  Restant : {5}", _Region, _Couleur, _Etiquette, _Millesime, _Prix, Valeur)
        Else
            Return String.Format("{0} ,{1} ,{2} , de {3} - [{4}€]", _Region, _Couleur, _Etiquette, _Millesime, _Prix)
        End If
    End Function
 
    ''' <summary>
    ''' Retourne la surcharge du ToString de la Bouteille.
    ''' </summary>
    Public Function ToString1() As String
        Return String.Format("{0} ,{1} ,{2} , de {3} - ( {4} - {5} )", _Region, _Couleur, _Etiquette, _Millesime, _Identifiant, _Marqueur)
    End Function
 
End Class
Je souhaite récupérer les bouteilles en supprimant les doublons. J'utilise la variable "Marqueur" qui contient une valeur identique pour chaque bouteille identique. Ensuite j'utilise le code ci-desous

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
Public Class ComparerBouteille
    Implements IEqualityComparer(Of Bouteille)
 
    Public Function Equals1(x As Bouteille, y As Bouteille) As Boolean Implements IEqualityComparer(Of Bouteille).Equals
        If x Is y Then Return True
 
             'Check whether any of the compared objects is null.
        If x Is Nothing OrElse y Is Nothing Then Return False
 
        Return Not (x.Marqueur = y.Marqueur And Not x.Exclure And Not y.Exclure)
    End Function
 
    Public Function GetHashCode1(obj As Bouteille) As Integer Implements IEqualityComparer(Of Bouteille).GetHashCode
        Return obj.Identifiant
    End Function
 
End Class
 
Dim ListeDesBouteilles_Filtre as list(of bouteille) = _ListeBouteilles.Distinct(New ComparerBouteille).ToList()
Pour une raison que j'ignore, cela ne fonctionne pas... Si une personne peut m'aider, je la remercie d'avance

Merci à tous...