我们往往需要把一个列表中,去除另外一个列表的元素,C#提供了很好的方法,Except。
但是往往不小心就掉进坑里了。
看下面的代码:
static void Main(string[] args) { List<int> allItem = new List<int>(); allItem.Add(1); allItem.Add(2); allItem.Add(3); allItem.Add(4); allItem.Add(3); allItem.Add(2); List<int> removedItems = new List<int>(); removedItems.Add(1); removedItems.Add(2); allItem = allItem.Except(removedItems).ToList(); Console.WriteLine("count:" + allItem.Count); Console.WriteLine("items:"); foreach (int item in allItem) { Console.WriteLine(item); } Console.ReadKey(); }
首先,要注意的是,Except不是直接对原对象直接移除,所以如果想改变原来的对象,那么需要重新赋值。如:allItems = allItems.Except(removedItems).ToList()
其次,上面的例子中,最后allItems中剩下一个元素?表面上看,我以为剩下3个,一个4和两个3。可结果呢,运行结果如下:
没错,就是把剩下元素中的重复的项也去除了,而可能不是我们原本想要达到的目的。