2015-04-15 66 views
-1

我想修改父母在C#中的孩子。 你知道這是不可能做到這一點在foreach,解釋我的問題,以更好的方式,這裏是我在第一次編碼:與C中的兒童循環#

foreach (GantLineItem proj in Tasks) 
{ 
    foreach (GantLineItem jalOrMach in proj.Children) 
    { 
     if (jalOrMach.Children.Count > 0) 
     { 
      foreach (GantLineItem machOrServ in jalOrMach.Children) 
      { 
       if (machOrServ.Children.Count > 0) 
       { 
        GanttView.ExpandCollapseService.CollapseItem(machOrServ); 
       } 
       //else  jalOrMach.Children.Remove(machOrServ); 
      } 
      GanttView.ExpandCollapseService.CollapseItem(jalOrMach); 
     } 
     //else proj.Children.Remove(jalOrMach); 
    } 
    GanttView.ExpandCollapseService.CollapseItem(proj); 
} 

所以,每一次,我還不能執行。

要解決這個問題,我已經嘗試這樣做,有一個for循環:

for (var i = 0; i < Tasks.Count; i++) 
{ 
    for (var j = 0; j < Tasks[i].Children.Count; j++) 
    { 
     for (var k = 0; k < Tasks[i].Children[j].Children.Count; k++) 
     { 

     } 
    } 
    GanttView.ExpandCollapseService.CollapseItem(Tasks[i]); 
} 

但是在這裏,我有一個新的問題,該行

for (var k = 0; k < Tasks[i].Children[j].Children.Count; k++) 

不能執行,在這種情況下「計數」是不可能的,爲什麼?

+1

「該」計數「是不可能在這種情況下,」>爲什麼不呢?編譯錯誤?其他事情?請具體說明。 –

+1

什麼類型是「孩子」?這是'IEnumerable '例如,不會有'Count'屬性。不過,你可以使用LINQ *方法*'Count()'。 –

+0

對不起,確實不夠精確:運算符'<'不能應用於'int'和'方法組'的操作數 –

回答

1

我會假設,最終Children屬性是IEnumerable<T>,從而解決了Count是LINQ 擴展方法Enumerable.Count。沒有Count財產。

變化:

for (var k = 0; k < Tasks[i].Children[j].Children.Count; k++) 

要:

for (var k = 0; k < Tasks[i].Children[j].Children.Count(); k++) 

然而,爲了使指標始終保持有效,你需要做的這個反向。最簡單的解決方案通常是克隆要迭代的集合。這不會導致錯誤,例如:

foreach (GantLineItem proj in Tasks.ToList()) 
{ 
    Tasks.Remove(proj); 
} 
+0

我試過了,它不工作,我真的不明白,我翻譯我的錯誤,我把它給你:) –

+0

謝謝你的幫助親愛的!我的錯誤:system.collections.ienumerable'不包含'count'的定義 –

+1

您可能需要確保在使用聲明中有'using System.Linq;'。 –