有这样的循环:
List<Category> categories = new List<Category>();
foreach(Category category in categories)
{
...
if(...)
{
Category subcategory = new Category();
...
categories.Add(subcategory);
}
}
问题当然是循环集合(类别)在运行时并不喜欢被修改,但是我需要对子类别执行与对类别I完全相同的操作。必须从头开始。
这样做的唯一选择 - 还是有更明智的方法吗?
List<Category> categories = new List<Category>();
List<Category> subcategories = new List<Category>();
foreach(Category category in categories)
{
...
if(...)
{
Category subcategory = new Category();
...
subcategories.Add(subcategory);
}
}
foreach(Category subcategory in subcategories)
{
...
}
感谢。
答案 0 :(得分:1)
这听起来像是级别顺序树遍历。考虑使用队列:
var categoryList = GetMyInitialListOfCategories();
var categoryQueue = new Queue<Category>(categoryList);
while (categoryQueue.Count > 0)
{
var category = categoryQueue.Dequeue();
if (WeShouldMakeASubcategoryFromThis(category))
{
var subcategory = new Category();
categoryList.Add(subcategory);
categoryQueue.Enqueue(subcategory);
}
}
答案 1 :(得分:0)
由于您正在编辑集合,因此代码错误处于无法确定的状态。 要解决此问题,请使用for循环而不是foreach,并手动减少计数,如:
for (int i = 0; i < categories.count; i++)
{
...
if(...)
{
Category subcategory = new Category();
...
categories.Add(subcategory);
i--;
}
}