我试图弄清楚如何遍历一个我想从另一个项目列表中删除的项目的通用列表。

假设这是一个假设的例子

List<car> list1 = GetTheList();
List<car> list2 = GetSomeOtherList();

我想用foreach遍历list1,并删除list1中的每个项目,这也包含在List2中。

我不太确定如何去做,因为foreach不是基于索引的。


当前回答

因为Except不修改列表,你可以在list <T>上使用ForEach:

list2.ForEach(item => list1.Remove(item));

这可能不是最有效的方法,但它简单,因此可读,并且它更新原始列表(这是我的要求)。

其他回答

你可以使用LINQ,但我会使用RemoveAll方法。我觉得这个更能表达你的意图。

var integers = new List<int> { 1, 2, 3, 4, 5 };

var remove = new List<int> { 1, 3, 5 };

integers.RemoveAll(i => remove.Contains(i));
list1.RemoveAll(l => list2.Contains(l));

您不需要索引,因为List<T>类允许您使用remove函数按值而不是按索引删除项。

foreach(car item in list1) list2.Remove(item);

你可以使用Except:

List<car> list1 = GetTheList();
List<car> list2 = GetSomeOtherList();
List<car> result = list2.Except(list1).ToList();

你可能根本不需要这些临时变量:

List<car> result = GetSomeOtherList().Except(GetTheList()).ToList();

注意,Except不会修改任何一个列表——它会用结果创建一个新的列表。

因为Except不修改列表,你可以在list <T>上使用ForEach:

list2.ForEach(item => list1.Remove(item));

这可能不是最有效的方法,但它简单,因此可读,并且它更新原始列表(这是我的要求)。