2015-07-19 72 views
0

在C#中,如何获得所有子对象的最佳方式,其中的子对象可以有子对象?如何获得IEnumerable的可以有子对象的子对象

下面是一个例子:

我有一个叫Test类,它有以下ID:

int id 

int parentId 

我有一个List<Test>称为testItems被填充了许多测试对象。

每个Test对象,具有id,并且可以具有在ListTest另一个对象的parentId

如果我有一个id,获得所有孩子(包括孩子的孩子)的IEnumerable<Test>的最佳方式是什么?

下面是一些更多的信息:

我有以下试验对象:

  • 一个
  • b
  • Ç
  • d

  • 一个没有父

  • 2b具有

  • ℃的父母有B的母

  • d已丙

的父母如果我有B的ID,我怎样才能得到包含c的所有孩子的IEnumerable。这IEnumerable将包含c和d。

谢谢。

+0

既然这样,你的'Test'类可以说是没有任何_ “子对象” _仅仅标识OO。你是否不知道'列表'作为一个成员?请发布您的整个班级定义 – MickyD

+0

我有填充了测试对象的列表。 – user3736648

+0

好的,但是_root container_在别的地方,或者每个Test都有那个成员?正如我所说,请张贴您的_entire_定义 – MickyD

回答

0

事情是这样的:

IEnumerable<Test> AllChildren(List<Test) list,Test mytest) 
{ 
    foreach(var test in list) 
    { 
    if (test.parentid==mytest.id) 
    { 
     yield return test; 
     foreach(var t in AllChildren(list,test)) 
     { 
     yeild return t; 
     } 
    } 
    } 
} 
+0

代码*感觉*难以想象的慢(也是正确的)。 –

+1

是的。如有必要,您可以加快速度。建立一个字典或类似的东西,但不要优化不需要的东西。 –