2010-07-09 6 views
0

J'utilise VB.NET avec .NET 2.0.Comparaison de deux listes génériques sur une propriété spécifique

J'ai deux listes, et je veux comparer les listes sur une propriété spécifique dans l'objet, pas l'objet dans son ensemble, et créer une nouvelle liste qui contient des objets qui sont dans une liste, mais pas l'autre.

myList1.Add(New Customer(1,"John","Doe") 
myList1.Add(New Customer(2,"Jane","Doe") 

myList2.Add(New Customer(1,"","") 

Résultat dans l'exemple ci-dessus contient un client, Jane Doe, parce que l'identifiant 2 n'a pas été dans la deuxième liste.

Comment pouvez-vous comparer ces deux List<T> ou IEnumerable<T> dans .NET 2.0 (sans LINQ)?

Répondre

3

est ici la version C#, VB venir sous peu ...

Dictionary<int, bool> idMap = new Dictionary<int, bool>(); 
myList2.ForEach(delegate(Customer c) { idMap[c.Id] = true; }); 

List<Customer> myList3 = myList1.FindAll(
    delegate(Customer c) { return !idMap.ContainsKey(c.Id); }); 

... et voici la traduction VB. Notez que VB n'a pas des fonctions anonymes dans .NET2, donc en utilisant les méthodes ForEach et FindAll serait plus maladroit que norme For Each boucles:

Dim c As Customer 

Dim idMap As New Dictionary(Of Integer, Boolean) 
For Each c In myList2 
    idMap.Item(c.Id) = True 
Next 

Dim myList3 As New List(Of Customer) 
For Each c In myList1 
    If Not idMap.ContainsKey(c.Id) Then 
     myList3.Add(c) 
    End If 
Next 
0

Ceci est possible en C# 2.0.

List<Customer> results = list1.FindAll(delegate(Customer customer) 
          { 
           return list2.Exists(delegate(Customer customer2) 
               { 
                return customer.ID == customer2.ID; 
               }); 
          }); 
+0

Est-il possible avec VB.NET (. NET 2.0)? –

0

Je veux partager ma fonction de comparer deux liste des objets:

code:

Public Function CompareTwoLists(ByVal NewList As List(Of Object), ByVal OldList As List(Of Object)) 
       If NewList IsNot Nothing AndAlso OldList IsNot Nothing Then 
        If NewList.Count <> OldList.Count Then 
         Return False 
        End If 
        For i As Integer = 0 To NewList.Count - 1 
         If Comparer.Equals(NewList(i), OldList(i)) = False Then 
          Return False 
         End If 
        Next 
       End If 
       Return True 
      End Function 

Exemple:

Dim NewList as new list (of string) from{"0","1","2","3"} 
Dim OldList as new list (of string) from{"0","1","2","3"} 
messagebox.show(CompareTwoLists(NewList,OldList)) 'return true 

Dim NewList as new list (of string) from{"0","1","2","4"} 
Dim OldList as new list (of string) from{"0","1","2","3"} 
messagebox.show(CompareTwoLists(NewList,OldList)) 'return false