VB.NET Doublons dans Liste
Bonjour,
Je rencontre un mystère avec la fonction IndexOf. Je dois batir une liste d'éléments uniques basée sur plusieurs sources: une table Access MDB et des fichiers textes. J'ajoute tous les éléments venant de la table MDB puis les éléments venant du fichier texte si celui ci n'est pas déjà présent dans la liste.
La table MDB est bâtie comme suit:
Nom
Prenom
NumeroSecu
les fichiers texte:
Nom<tab>Prenom<tab>NumeroSecu
J'ai créé une classe cItem avec
Nom (string)
Prenom (string)
NumeroSecu (string)
et un tableau Clients as new list(Of cItem)
Je récupère mes enreg de la table via un DataRow():
Code:
1 2 3 4 5
| For Each R As DataRow In Planning
dim sNom as string=R(0) : dim sPrenom as string=R(1) : dim sNumeroSecuas string=R(3)
LigneMDB = New cItemWith {.Nom = sNom , .Prenom = sPrenom , .NumeroSecu = sNumeroSecu}
Clients.Add(LigneMDB )
next |
Ensuite, je récupère mes enreg du fichier texte via un sTexte=File.ReadAllLines(FichierText) et je teste qu'il n'existe pas déjà dans la liste
Code:
1 2 3 4 5 6 7 8 9 10
| For Each sLigne As String In sTexte
dim sChamps() as string = Split(sLigne, vbTab)
dim sNom as string=sChamps(0) : dim sPrenom as string=sChamps(1) : dim sNumeroSecuas string=sChamps(3)
LigneTXT = New cItemWith {.Nom = sNom , .Prenom = sPrenom , .NumeroSecu = sNumeroSecu}
if Clients.IndexOf(LigneTXT )>0 then
msgbox("déjà là!")
else
Clients.Add(LigneTXT )
end if
next |
Et bien qu'il existe des doublons entre le MDB et le Txt, le IndexOf ne détecte rien. J'ai bien comparé pour ce doublon chacune des propriétés de classe pour l'enreg issu du MDB et l'enreg issu du Txt. Elles sont toutes égales!
Par contre LigneMDB.equals(LigneTXT) me retourne False :weird:
Avez vous une explication ?
Merci pour mes cheveux
Olivier
<LASTNEWS:> Je me suis "amusé" avec LINQ et l'instruction Distinct qui devrait résoudre le problème
Code:
1 2 3 4
| Dim result = From L In Clients
Order By L.Nom, L.Prenom
Select L
Distinct |
Et bien même résultat: il ne voit pas les doublons!