从嵌入列表中删除项目
本文关键字:object 使用 LINQ 删除项目 列表 | 更新日期: 2023-09-27 17:53:30
总之,我有如下的类结构
public class Foo : IComparable<Foo>
{
public List<Bar> Bars;
}
public class Bar : IComparable<Bar>
{
public List<Con> Cons;
}
public class Con : IComparable<Con>
{
...
}
我知道如何从列表中删除对象
authorsList.RemoveAll(x => x.FirstName == "Bob");
但是,对于上面的类,我如何从基础对象Foo
中删除称为badConList
的List<Con>
?显式地,类层次结构像
Foo foo = new Foo();
foo.Bars = new List<Bar>() { /* Some Bar list */ };
foreach (Bar bar in foo.Bars)
bar.Cons = new List<Con>() { /* Some Con list */ };
// Now a bad Con list.
List<Con> badCons = new List() { /* Some bad Con list */ };
如何使用LINQ从每个Bar
的foo
中删除badCons
?
感谢您的宝贵时间。
p。LINQ可能不是最快的方法;一个简单的循环可能是(这就是LINQ将在引擎盖下做的事情)。你对此也有何评论?
您仍然可以使用RemoveAll
:
bar.Cons.RemoveAll(x => badCons.Contains(x));
另一个解决方案是使用循环:
foreach(var badCon in badCons)
bar.Cons.Remove(badCon);
两个版本都将其中一个列表循环多次:
- 第一个版本循环
badCons
N次,N为bar.Cons.Count()
。 - 第二个版本循环
bar.Cons
N次,其中N为badCons.Count()
。
如果两个列表中的一个比另一个大很多,最好选择只循环大列表一次的版本,否则使用对您和您的代码库读者更容易理解的版本。