在 C# 中用 children 循环
Loop with children in c#
我正在尝试在 c# 中修改 children 的 parents。
如您所知,在 foreach 中不可能这样做,为了更好地解释我的问题,这是我最初编写的代码:
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);
}
所以,每次,我的else都无法执行。
为了解决这个问题,我尝试使用 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++)
无法执行,"Count"在这种情况下是不可能执行的,为什么?
我假设最后的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);
}
我正在尝试在 c# 中修改 children 的 parents。 如您所知,在 foreach 中不可能这样做,为了更好地解释我的问题,这是我最初编写的代码:
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);
}
所以,每次,我的else都无法执行。
为了解决这个问题,我尝试使用 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++)
无法执行,"Count"在这种情况下是不可能执行的,为什么?
我假设最后的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);
}