error msg:"集合已修改;枚举操作可能不会执行。 "

ncowboy 2005-05-09 04:51:44
集合已修改;枚举操作可能不会执行。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidOperationException: 集合已修改;枚举操作可能不会执行。

private void 列出产品分类()
{
//84对应“产品分类”,其子分类是产品大类。
System.Data.DataTable dt=_类别.列出子类(84);
foreach(System.Data.DataRow dr in dt.Rows)
{
DDL产品分类.Items.Add(new ListItem(Convert.ToString(dr["描述"]),Convert.ToString(dr["编号"])));
System.Data.DataTable dt2=_类别.列出子类(Convert.ToUInt16(dr["编号"]));

foreach(System.Data.DataRow dr2 in dt.Rows)
{
DDL产品分类.Items.Add(new ListItem("-"+Convert.ToString(dr2["描述"]),Convert.ToString(dr2["编号"])));
}
}
}


我错在哪里?
谢谢了。
...全文
97 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ncowboy 2005-05-09
  • 打赏
  • 举报
回复
“主要是你在枚举的时候试图改变枚举集合中的结构”
我这里,改变了什么了导致枚举无法继续?
ncowboy 2005-05-09
  • 打赏
  • 举报
回复
如下代码能够正常运行,但是,只返回一级目录。它的子目录项没有返回。比较郁闷。

foreach(System.Data.DataRow dr in dt.Rows)
{
string 描述=Convert.ToString(dr["描述"]);
uint 编号=Convert.ToUInt16(dr["编号"]);
DDL产品分类.Items.Add(new ListItem(描述,编号.ToString()));

//System.Data.DataTable dt2=_类别.列出子类(编号);
//foreach(System.Data.DataRow dr2 in dt2.Rows)
//{
//DDL产品分类.Items.Add(new ListItem(Convert.ToString(dr2["描述"]),Convert.ToString(dr2["编号"])));
//}
}
leiyingw 2005-05-09
  • 打赏
  • 举报
回复
如果您要求通过循环删除集合/数组中的元素,那么应该通过在第一次循环中记录下来,然后在第二次循环中删除。
leiyingw 2005-05-09
  • 打赏
  • 举报
回复
这个跟你的对象有没有打开/关闭联接没什么关系。主要是你在枚举的时候试图改变枚举集合中的结构(增加/减少)。
stephie 2005-05-09
  • 打赏
  • 举报
回复
大概是foreach中的对象集在循环中被修改了吧
ncowboy 2005-05-09
  • 打赏
  • 举报
回复
试验证明,错误在“System.Data.DataTable dt2=_类别.列出子类(Convert.ToUInt16(dr["编号"]));”

难道我在枚举dt1的时候,数据库连接还没有断开??

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧