2010-10-13 7 views
1

J'ai vérifié partout et je ne trouve pas de solution. J'ai le suivantCollection .Contains() ne fonctionne pas

Dim users as New List(of TUser) 

Private Sub AddSelectedUsers() 

For Each user as TUser in gridSelectedItems() 

If Not users.Contains(user) Then 

users.Add(user) 

End If 

Next 

End Sub 

Le "Contient" ne fonctionne pas. Je continue d'obtenir des doublons sur la liste des utilisateurs.

Répondre

5

La méthode List.Contains() utilise l'opérateur d'égalité par défaut. Comme TUser semble être une classe, List.Contains() ne correspondra que si vous faites référence à la même instance de TUser dans les deux comparaisons, ce qui n'est apparemment pas le cas. Voir une explication plus détaillée here.

La solution consiste à implémenter un remplacement d'égalité pour la classe TUser, comme dans l'exemple here.

+0

Je soupçonnais que cela pourrait avoir été le problème parce que gridSelectedItems() est une liste passée "ByRef" à ce formulaire. Je vais donner un coup de feu. –

+0

J'ai fini par remplacer les Equals dans ma classe TUser et cela fonctionne. –