C# Except

我们往往需要把一个列表中,去除另外一个列表的元素,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。可结果呢,运行结果如下:

没错,就是把剩下元素中的重复的项也去除了,而可能不是我们原本想要达到的目的。

原文地址:https://www.cnblogs.com/sdner/p/8390732.html