根据其他列表的项目删除列表中的项目

时间:2011-05-04 15:56:36

标签: c# list

如何根据其他列表中的项目从一个列表中删除项目?

基本上我想比较list1和list2,并且应该删除这些列表中每个项目的差异。

前:我有班级叫狗

class Dog
{
   private string _name;
    public string Name
        {
            get { return selisih; }
            set { selisih = value; }
        }

}

在winform中

list<Dog> Dog1 = new list<Dog>();
list<Dog> Dog2 = new list<Dog>();

并将项目添加到此列表中。我该如何比较这两个列表?当Dog2中不存在Dog1中的项目时。应从Dog1中删除或删除这些项目。

3 个答案:

答案 0 :(得分:4)

使用LINQ - Except方法应该这样做。

var dog3 = Dog1.Except(Dog2).ToList();

你可能需要传递一个比较狗的功能,所以它知道如何做到这一点。

未测试:

var dog3 = Dog1.Except(Dog2, (d1, d2) => d1.Name.CompareTo(d2.Name)).ToList();

答案 1 :(得分:2)

你可以在LINQ中这样做

Dog1.ForEach(x => 
            {
                if (!Dog2.Select(z=>z.Name).Contains(x.Name)) 
                {
                    Dog1.Remove(x);
                }
            });

答案 2 :(得分:1)

您最好的选择是使用List.Contains()遍历您需要同步的列表,以检查项目是否存在。

例如:

For Each Dog As Dog In Dog1
If Dog2.Contains(Dog) = False Then
Dog2.Add(Dog)
End If
End For

添加第二个列表中不存在的项目,但在第一个列表中添加。