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

ASP.NET 2.0 foreach遍历TreeView,删除符合条件节点,报集合已改变错误~!!!
foreach   (TreeNode   tn   in   tnc)
                {  
                                if   (tn.Text.Equals( "aaa "))
                                {
                                        tnc.Remove(tn);
                                    //return   如果用return,可以解决报错问题.但不会再往下遍历
                                }
                                CheckNode(tn.ChildNodes);
                }

使用上述方法可以遍历所有节点,也可以删除符合条件节点.但用Foreach遍历集合删除后,会报错.
有没有不用Foreah遍历方法.或者有什么别的解决方法.

------解决方案--------------------
不能用foreach
只能用for
foreach对于读取的对象是只读的操作.
------解决方案--------------------
if (tn.Text.Equals( "aaa "))
{
tnc.Remove(tn);
//return 如果用return,可以解决报错问题.但不会再往下遍历
}
else
{
CheckNode(tn.ChildNodes);
}

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

最新版本:20070212

http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
------解决方案--------------------
就好像
你从桶中把水舀出的同时还将桐高度用锯子锯低

1 用while 循环

2 用for 循环 从后向前
for(int i = YourCollectionOjbect.count-1; i> 0; i--){
}
------解决方案--------------------
YEAH!
------解决方案--------------------
//--用递归删除
private void delTreeNode(TreeNode pNode)
{
if(pNode.ChildNodes.Count > 0)
{
for(int ix=0; ix <pNode.ChildNodes.Count; ix++)
{
TreeNode delNode = pNode.ChildNodes[ix];
delTreeNode(delNode);
YourTreeID.Nodes.Remove(delNode);
}
}
}
------解决方案--------------------
up
------解决方案--------------------
从最低层的一级删除呢?
------解决方案--------------------
MARK
------解决方案--------------------
foreach过程中不允许对集合进行改动的,改用一般的循环吧。
------解决方案--------------------
ok
------解决方案--------------------
foreach只允许改动,楼上几位都回答完了
------解决方案--------------------
不能用foreach ,foreach对于读取的对象是只读的操作.
只能用for