删除列表中未正常工作的项目

时间:2018-03-20 13:42:57

标签: c# linq

假设我有两个T列表,我需要从列表A中删除所有不在列表B中的元素。我这样做了:

A.RemoveAll(item => !B.Contains(item));

这很好用,但如果列表B不包含任何元素,则此代码将删除列表A中的所有项目,但不应该。为什么会这样?

4 个答案:

答案 0 :(得分:1)

好吧,它会删除所有内容,因为列表A中的所有项都适用。

如果列表B 为空,则只想删除A中的项目:

if(B.Any())
    A.RemoveAll(item => !B.Contains(item));

答案 1 :(得分:0)

这是因为列表B不包含任何项目。你要说的是从A中删除A中不存在的所有内容。有效地说删除所有内容因为B没有任何内容

答案 2 :(得分:0)

好吧,因为如果A为空,对于!B.Contains(item)中的所有元素,表达式trueA.RemoveAll(item => B.Count > 0 && !B.Contains(item));

试试这个:

B
如果if (B.Count > 0) A.RemoveAll(item => !B.Contains(item)); 为空,

或更好地避免迭代:

{{1}}

答案 3 :(得分:-1)

这是因为!B.Contains(item)A的所有元素都返回true。如果您不希望发生这种情况,只需检查B是否为空:

A.RemoveAll(item => B.Any() && !B.Contains(item));