假设我有两个T
列表,我需要从列表A
中删除所有不在列表B
中的元素。我这样做了:
A.RemoveAll(item => !B.Contains(item));
这很好用,但如果列表B
不包含任何元素,则此代码将删除列表A
中的所有项目,但不应该。为什么会这样?
答案 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)
中的所有元素,表达式true
为A.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));