关于foreach的一些体会

原创 2006年06月24日 16:11:00

使用foreach的约束
   ①使用 foreach , 必须在被 foreach in对象类 中实现
    GetEnumerator 方法(继承IEnumerable) 。
   ②foreach 语句是对枚举数的包装,它只允许从集合中读取,不允许写入集合。
   ③foreach 内部,不允许更改 foreach in对象 中的集合。

 

问题  

  ArrayList arr = new ArrayList();
   arr.Add("123");
   arr.Add("456");
   arr.Add("789");

   foreach (string str in arr)
   {
       arr.Remove("789");
       Console.WriteLine(str);
   }

 以上代码当便利ArrayList中的第二个对象时,会引发InvalidOperationException异常。

 

分析
   当使用 foreach 时,首先调用被遍历对象的 GetEnumerator 方法,返回一个Enumerator ,
   然后 foreach 将对这个返回的枚举数进行遍历。
   个人感觉 foreach 实际做的操作就是:
  IEnumerator enumArr = arr.GetEnumerator();
   while (enumArr.MoveNext())
   {
       set.Remove("789");
       System.Console.WriteLine(enumArr.Current);
   }
   而MSDN上有如下说明:
   ”只要集合保持不变,枚举数就将保持有效。
    如果对集合进行了更改(例如添加、修改或删除元素),
    则该枚举数将失效且不可恢复,并且下一次对 MoveNext 或 Reset 的调用将引发
    InvalidOperationException。”
   所以发生了上面问题中的代码发生了异常。

相关文章推荐

使用c:forEach模拟s:select标签

  • 2017年11月03日 22:09
  • 10.35MB
  • 下载

foreach下次我的下线

  • 2017年06月17日 15:10
  • 2KB
  • 下载

Jsp实现页面forEach循环遍历多条数据的显示和后台对应数据的获取(strurs1)实现

使用jstl标签和form动态的页面数据显示操作获取! html代码: 用户信息表 ...

对Foreach语句测试

  • 2012年11月18日 11:49
  • 1003B
  • 下载

foreach循环实例

  • 2013年10月26日 15:55
  • 22KB
  • 下载

for和foreach那个效率更高?原因是什么?

写这篇文章的原因主要是在开发过程中突然有以下几个疑问,特抽出时间深度探究一下,以加深自身对php的理解。 1、作为一名phper,for和foreach循环遍历几乎每天都在使用,那么这两种遍历方式哪一...
  • bk_guo
  • bk_guo
  • 2017年06月16日 10:47
  • 1882

Collection 集合的练习 foreach

  • 2011年05月18日 10:31
  • 3KB
  • 下载

c#Foreach.rar

  • 2009年10月05日 13:51
  • 5KB
  • 下载

Mybatis动态Sql的Foreach遍历拼接输入参数中的List或数组

pojo、pojo包装类 public class User { private int id; private String username; private String sex; p...

一个ForEach管理类

  • 2006年02月23日 09:05
  • 197KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于foreach的一些体会
举报原因:
原因补充:

(最多只允许输入30个字)