您的位置:首页 > 其它

集合已修改;可能无法执行枚举操作

2012-08-08 12:44 525 查看
foreach是取只读的,在取的时候数据不能变(包括修改,删除,添加等)。要避免这个问题,就应该使用for循环。

以前没有考虑过对collection类型对象操作时for 和foreach的区别,总感觉foreach更方便一些。今天写了个foreach循环来遍历一个list,之后在foreach体内又对其添加,表面上逻辑和写法看着没错,但在运行时出现异常:查询集合修改;可能无法执行枚举操作。查了一下,这个是使用foreach的典型的问题。

附错误demo代码:

try
{
List<string> lsts = new List<string>();
lsts.Add("1");
lsts.Add("2");
lsts.Add("3");
lsts.Add("4");
lsts.Add("2");
lsts.Add("6");
lsts.Add("1");
lsts.Add("8");
lsts.Add("9");
lsts.Add("10");
int count = 0;
int countreus = 0;
List<string> lstresult = new List<string>();
foreach (string a in lsts)
{
count++;
if (count == 1)
{
lstresult.Add(a);
}
else
{
if (count == lsts.Count)
{
count = 0;
}
else
{
foreach (string b in lstresult)
{
countreus++;
if (b.Contains(a.Trim()))
{
break;
}
else
{
if (countreus == lstresult.Count)
{
lstresult.Add(a);
}
}
}
}
}
}
}
catch (Exception ex)
{
throw;
}


最后抛出异常:集合已修改;可能无法执行枚举操作。

正确代码如下:

try
{
List<string> lsts = new List<string>();
lsts.Add("1");
lsts.Add("2");
lsts.Add("3");
lsts.Add("4");
lsts.Add("2");
lsts.Add("6");
lsts.Add("1");
lsts.Add("8");
lsts.Add("9");
lsts.Add("10");
int count = 0;
int countreus = 0;
List<string> lstresult = new List<string>();
foreach (string a in lsts)
{
count++;
if (count == 1)
{
lstresult.Add(a);
}
else
{
if (count == lsts.Count)
{
count = 0;
}
else
{
for (int i = 0; i < lstresult.Count; i++)
{

countreus++;
if (lstresult[i].Contains(a.Trim()))
{
break;
}
else
{
if (countreus == lstresult.Count)
{
lstresult.Add(a);
}
}
}
}
}
}
}
catch (Exception ex)
{
throw;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐