在考试系统的调试过程中,需要对添加的试题进行移除。而由于试题是放置在arraylist的动态数组中的。一下就是这个用来循环移除的代码。这个代码看起来没有任何问题,但是由于arraylist在遍历过程中是无法对其进行修改的。所以总会出现无法进行下一次枚举的错误。
源码:
foreach (DataRow row in ltAllQuestion) { if (row["QuestionID"].ToString () == id) { ltAllQuestion.Remove(row); } }
解决方案:
//定义用来停止计数的标识 bool flag=false; //定义用来计量循环次数的计数器 int countforremove=0; foreach (DataRow row in ltAllQuestion) { if (row["QuestionID"].ToString () == id) { flag=true; } If(flag==false){ countforremove=countforremove+1; } }
另外还有一些其他的解决方法:
总结:这个问题的出现就是arraylist这个集合不允许在枚举时对集合进行修改。因为一旦修改了,就改变了这个数组的结构。就无法判断下一次遍历从哪里开始了。只能通过某种方法将这个移除操作挪到外面的循环外来执行。可能这个方法很简单,但是这个解决的思路也是废了我很长时间的。方法不重要的,重要的是解决的思路。