日期:2014-05-19  浏览次数:20894 次

集合已修改;可能无法执行枚举操作。
遍历到第二层就出这问题了。
                private   static   void   CreateTree(TreeNodeCollection   Nds,   int   parentID,   TList <HROrganization>   list)
                {
                        TreeNode   tmpNd;
                        list.RemoveFilter();
                        list.Filter   =   "ParentID   =   "   +   parentID.ToString();
                        foreach   (HROrganization   hro   in   list)
                        {
                                tmpNd   =   new   TreeNode();
                                tmpNd.Name   =   hro.Depart_ID.ToString();
                                tmpNd.Text   =   hro.Depart_Name.ToString();
                                tmpNd.Tag   =   hro;
                                Nds.Add(tmpNd);
                                CreateTree(Nds[Nds.Count   -   1].Nodes,   Convert.ToInt32(hro.Depart_ID.ToString()),   list);
                        }
                }

------解决方案--------------------
在对list进行循环的时候又对list进行了修改,这是不应该的。

换个思路来处理这个问题。

比如先把这个列表的内容复制一份,对这一份列表循环,然后对List进行修改。
------解决方案--------------------
使用foreach时 不能改变集合的数据

举例来简单的说就是让你数一个药瓶子里到底有多少药片?

可是你一边数 一边有人又在往里添 那么永远都数不清楚
------解决方案--------------------
for(int i = 0;i < list.count;i++)
{
foreach (HROrganization hro in list)
{
tmpNd = new TreeNode();
tmpNd.Name = hro.Depart_ID.ToString();
tmpNd.Text = hro.Depart_Name.ToString();
tmpNd.Tag = hro;
Nds.Add(tmpNd);
CreateTree(Nds[Nds.Count - 1].Nodes, Convert.ToInt32(hro.Depart_ID.ToString()), list);
list.romove(hro);
break;
}

}
------解决方案--------------------
判断下list.count=0
------解决方案--------------------
LZ TList 这个东东有点像 DataView

foreach 内部使用枚举器迭代,而这个迭代器在一开始的时候就返回了,它的迭代次数已经确定了,

但是,你后面又更新了集合,导致之前的迭代次数不一致了

当使用 foreach 的时候,集合只能处于只读状态,否则产生不可以预期的效果