【问题标题】:Predicate condition to RemoveAll items off a list based on a condition not working谓词条件根据条件不工作从列表中删除所有项目
【发布时间】:2020-02-17 07:10:16
【问题描述】:

我有两个如下定义的列表

IEnumerable<Type01> newItems

List<Type02> oldItems

我只是想删除新列表中与旧列表中的项目相同的项目

即使没有抛出异常/错误,这里也没有实现所需的目标

知道为什么会这样吗?

foreach (var item inoldItems )
{
    newItems.ToList().RemoveAll(x => x.Name == item.Name);
}

【问题讨论】:

  • .ToList() 创建 new List&lt;T&gt; 从中删除项目;请注意,original newItems 没有改变
  • 哦,我明白了!关于如何将 removeAll 应用于所需列表的任何建议?

标签: c# .net list linq


【解决方案1】:

好吧,ToList() 创建一个 new 列表,从中删除项目

 newItems.ToList().RemoveAll(x => x.Name == item.Name);

由于您没有将该列表分配回去而是将其丢弃,因此什么也没有发生。如果您想从newItems 中删除所有items,如果他们的名字在oldItems 中,您可以在Where 的帮助下过滤掉

 newItems = newItems
   .Where(item => !oldItems.Any(old => old.Name == item.Name))
   .ToList(); // If you want to have a list

【讨论】:

  • 我认为,在您的解决方案中,它应该只是赋值,而不是声明。
  • @as.if.i.code:你说的很对,很抱歉打错了
猜你喜欢
  • 2011-03-17
  • 2019-09-10
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多