private void foreachChildrenFlat(List <Tchild> Parents, DoItAlone doIt) { Element?.ForEach(localchild => { if (localchild.Me != null) { doIt(localchild); } }); foreachChildrenFlat(Parents.SelectMany(x => x.Element).ToList(), doIt); }
public List <Tchild> ToList() { List <Tchild> Res = new List <Tchild>() { (Tchild)this }; DoItAlone doIt = new DoItAlone(new Action <Tchild>(me => Res.Add(me))); RunForeachChildren(doIt); return(Res); }
private void foreachChildrenDown(Tchild Parents, DoItAlone doIt) { Parents?.Element?.ForEach(localchild => { foreachChildrenDown(localchild, doIt); if ((localchild != null) && (localchild.Me != null)) { doIt(localchild); } }); }
private void foreachChildrenUp(Tchild Parents, DoItAlone doIt) { Parents?.Element?.ForEach(localchild => { if (localchild.Me != null) { doIt(localchild); } foreachChildrenUp(localchild, doIt); }); }
public List <Tchild> Where(Func <Tchild, bool> Delegate) { List <Tchild> Res = new List <Tchild>(); DoItAlone doIt = new DoItAlone(new Action <Tchild>(me => { if (Delegate(me)) { Res.Add(me); } })); if (Delegate((Tchild)this)) { Res.Add((Tchild)this); } RunForeachChildren(doIt); return(Res); }
public void RunForeachChildren(DoItAlone doIt, EnumerationType EnumerationType = EnumerationType.FromDowntoUp) { if (EnumerationType == EnumerationType.FromDowntoUp) { foreachChildrenDown((Tchild)this, doIt); doIt((Tchild)this); } else if (EnumerationType == EnumerationType.FromUptoDown) { doIt((Tchild)this); foreachChildrenUp((Tchild)this, doIt); } else if (EnumerationType == EnumerationType.Flat) { doIt((Tchild)this); foreachChildrenFlat(((Tchild)this).Element, doIt); } else { throw new ArgumentException(); } }
public void RunForeachChildren(DoItAlone doIt) { foreachChildrenDown((Tchild)this, doIt); }