2015-07-19 3 views
0

В C#, как наилучшим образом получить IEnumerable<T> всех дочерних объектов, где дочерний объект может иметь ребенка?Как получить IEnumerable дочерних объектов, которые могут иметь дочерние объекты

Вот пример:

У меня есть класс с именем Test, со следующими идентификаторами:

int id 

int parentId 

У меня есть List<Test> под названием testItems, заполняемый со многими объектами испытаний.

Каждый Test объект, имеет id, и может иметь parentId другого Test объекта в List.

Если у меня есть id, как наилучшим образом получить IEnumerable<Test>, у которого есть все дети, включая детские ребята?

Вот еще некоторая информация:

у меня есть следующий тест-объекты:

  • б
  • с
  • d

  • A не имеет родителя

  • б имеет родителя

  • С имеет родителя б

  • d имеет родителя с

Если у меня есть идентификатор б, как я могу получить IEnumerable, который содержит всех детей c. Этот IEnumerable будет содержать c и d.

Спасибо.

+0

Как можно заметить, ваш класс 'Test', возможно, не OO, не имеющие _ "дочерние объекты" _ только идентификаторы. Вам не хватает «Список ' как член? Пожалуйста, опубликуйте все определение класса – MickyD

+0

У меня есть список , который заполнен тестовыми объектами. – user3736648

+0

ОК, но является ли это _rot container_ где-то еще или каждый «Тест» имеет этот член? Как я уже сказал, отправьте свое _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

Это так. Вы можете сделать это быстрее, если это необходимо. Создайте словарь или некоторые из них, но не оптимизируйте то, что не нужно. –

Смежные вопросы