using System;
using System.Collections.Generic;
using System.Linq;
public class Test
{
public static void Main()
{
var a = new A
{
bs = new List<B>
{
new B
{
Bs = new List<B>
{
new B
{
Cs = new List<C> {new C(), new C(), new C()}
}
},
Cs = new List<C> {new C(), new C()}
}
}
};
Console.WriteLine(a.CountCs());
Console.ReadLine();
}
}
public class A
{
public List<B> bs { get; set; }
public int CountCs()
{
return bs.Sum(b => b.TotalCs());
}
}
public class B
{
public List<B> Bs { get; set; }
public List<C> Cs { get; set; }
public int TotalCs()
{
var subtotal = Bs != null ? Bs.Sum(b => b.TotalCs()) : 0;
return subtotal + Cs.Count;
}
}
public class C
{
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkgICAgdmFyIGEgPSBuZXcgQQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBicyA9IG5ldyBMaXN0PEI+CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBuZXcgQgogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcyA9IG5ldyBMaXN0PEI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcyA9IG5ldyBMaXN0PEM+IHtuZXcgQygpLCBuZXcgQygpLCBuZXcgQygpfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENzID0gbmV3IExpc3Q8Qz4ge25ldyBDKCksIG5ldyBDKCl9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CgogICAgIAlDb25zb2xlLldyaXRlTGluZShhLkNvdW50Q3MoKSk7CiAgICAgCQogICAgIAlDb25zb2xlLlJlYWRMaW5lKCk7CgoJfQp9CgpwdWJsaWMgY2xhc3MgQQp7CiAgICBwdWJsaWMgTGlzdDxCPiBicyB7IGdldDsgc2V0OyB9CgogICAgcHVibGljIGludCBDb3VudENzKCkKICAgIHsKICAgICAgICByZXR1cm4gYnMuU3VtKGIgPT4gYi5Ub3RhbENzKCkpOwogICAgfQp9CgpwdWJsaWMgY2xhc3MgQgp7CiAgICBwdWJsaWMgTGlzdDxCPiBCcyB7IGdldDsgc2V0OyB9CiAgICBwdWJsaWMgTGlzdDxDPiBDcyB7IGdldDsgc2V0OyB9CgogICAgcHVibGljIGludCBUb3RhbENzKCkKICAgIHsKICAgICAgICB2YXIgc3VidG90YWwgPSBCcyAhPSBudWxsID8gQnMuU3VtKGIgPT4gYi5Ub3RhbENzKCkpIDogMDsKCiAgICAgICAgcmV0dXJuIHN1YnRvdGFsICsgQ3MuQ291bnQ7CiAgICB9Cn0KCnB1YmxpYyBjbGFzcyBDCnsKCn0K