C# 从嵌入列表中删除项目<;对象>;使用LINQ
我的班级结构如下C# 从嵌入列表中删除项目<;对象>;使用LINQ,c#,linq,class,C#,Linq,Class,我的班级结构如下 public class Foo : IComparable<Foo> { public List<Bar> Bars; } public class Bar : IComparable<Bar> { public List<Con> Cons; } public class Con : IComparable<Con> { ... } 但是,对于上面的类,如何从基本对象Foo中删除名
public class Foo : IComparable<Foo>
{
public List<Bar> Bars;
}
public class Bar : IComparable<Bar>
{
public List<Con> Cons;
}
public class Con : IComparable<Con>
{
...
}
但是,对于上面的类,如何从基本对象Foo
中删除名为badConList
的List
?明确地说,类层次结构的填充方式如下
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 */ };
Foo-Foo=new-Foo();
foo.Bar=new List(){/*Some Bar List*/};
foreach(食品酒吧中的酒吧)
Cons=new List(){/*一些Con List*/};
//现在是一份糟糕的罪犯名单。
List badCons=new List(){/*一些坏的Con List*/};
如何使用LINQ从foo
中删除每个Bar
的badcon
谢谢你抽出时间
Ps.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()
如果两个列表中的一个大于另一个,最好选择只循环一次大列表的版本,否则使用您和代码库读者更容易理解的版本。或者对于第二个列表上的一行,您可以执行
badCons.ForEach(b=>bar.Cons.Remove(b))
:)@mattytommo:我不喜欢这种方法,因此避免使用它。有关更多信息,请参阅。我遇到的问题是,有一个Bar
s列表,我也必须对其进行评分。我如何将其合并到上述LINQ版本中?我希望这是清楚的。。。谢谢你的时间,Daniel。使用这里解释的List.ForEach方法@Killercam:你可以像其他人建议的那样使用ForEach
方法,但我看不到任何好处。事实上,我认为这会损害可读性:bar.ForEach(bar=>bar.RemoveAll(x=>badCons.Contains(x))
或badCons.ForEach(x=>bar.ForEach(bar=>bar.Cons.Remove(x))
foreach(var badCon in badCons)
bar.Cons.Remove(badCon);