全部,我有以下类结构
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");
但是,对于上面的课程,如何从我的基础对象List<Con>
中删除名为badConList
的{{1}}?显式地,类层次结构填充为
Foo
如何使用LINQ从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 */ };
中移除badCons
?
感谢您的时间。
聚苯乙烯。 LINQ可能不是这里最快的方法;一个简单的循环可能是(无论如何LINQ将在引擎盖下做什么)。你也可以对此发表评论吗?
答案 0 :(得分:3)
您仍然可以使用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()
。如果两个列表中的一个比另一个大,那么选择只循环大型列表一次的版本是个好主意,否则请使用更易于理解的版本和代码库的读者