C# 删除不在列表中但工作不正常的项目
假设我有两个C# 删除不在列表中但工作不正常的项目,c#,linq,C#,Linq,假设我有两个T列表,我需要从列表A中删除列表B中没有的所有元素。我这样做: A.RemoveAll(item => !B.Contains(item)); 这工作得很好,但是如果列表B不包含任何元素,则此代码将从列表A中删除所有项目,并且不应该删除。为什么会这样?之所以会这样,是因为!B.Contains(item)为A中的所有元素返回true。如果不希望发生这种情况,只需检查B是否为空: A.RemoveAll(item => B.Any() && !B.Cont
T
列表,我需要从列表A
中删除列表B
中没有的所有元素。我这样做:
A.RemoveAll(item => !B.Contains(item));
这工作得很好,但是如果列表
B
不包含任何元素,则此代码将从列表A
中删除所有项目,并且不应该删除。为什么会这样?之所以会这样,是因为!B.Contains(item)
为A
中的所有元素返回true。如果不希望发生这种情况,只需检查B
是否为空:
A.RemoveAll(item => B.Any() && !B.Contains(item));
这是因为列表B不包含任何项。你说的是从A中删除B中不存在的所有内容。实际上是说删除所有内容,因为B没有任何内容,这是因为如果
B
为空,对于A
表达式中的所有元素!B.包含(项)
为真
试试这个:
A.RemoveAll(item => B.Count > 0 && !B.Contains(item));
或者,如果B
为空,最好避免迭代:
if (B.Count > 0) A.RemoveAll(item => !B.Contains(item));
它删除了所有内容,因为条件对于列表A中的所有项目都是真的 如果列表B不是空的,则只从A中删除项目:
if(B.Any())
A.RemoveAll(item => !B.Contains(item));
这个很好用,谢谢!我不明白你为什么要用Any而不是Count来编辑这个问题,也许其他用户可以解释一下,在
列表上使用Any()
方法不是个好主意,因为它使用枚举数而不是Count
属性。@YohDeadfall:那又怎么样?但是Any
比清点物品更有意义。特别是对于集合,Any
的开销可以忽略不计。对于其他类型,您无论如何都必须使用它。但是,检查一次总比检查一次好。换言之: