关于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。”
   所以发生了上面问题中的代码发生了异常。

关于NSTask使用的一些心得体会

NSTask是MAC OS X用来执行系统命令的一个类库,作用类似php的exec,最近在使用过程中遇到诸多不顺,结合以前的经验,记录一下,方便后来人 1.推荐使用Taskit 功欲善其事,必先利...
  • yuanya
  • yuanya
  • 2014年10月11日 22:34
  • 1781

【开发手札】关于折腾esp8266的一些体会

近来接触了一些刚开始折腾ESP8266的一些网友,虽然自己之前有做一些程序开发和数据处理方面的工作,但在硬件领域也算是一个菜鸟,这里不敢谈什么指导意见,只能说分享一下自己的一些折腾的经验,希望对大家有...
  • jackhuang2015
  • jackhuang2015
  • 2017年05月26日 15:52
  • 1793

关于学习linux的一些心得体会

学习linux之前必须要做好心理准备:  第一,要明白学好linux不是一件一蹴而就的事,一定要能坚持使用它,特别是在使用初期,由于在linux中,用户权限很大,做任何事情都很自由,所以,你往往...
  • ruirui_125
  • ruirui_125
  • 2016年11月28日 18:27
  • 3960

c#Foreach.rar

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

一个ForEach管理类

  • 2006年02月23日 09:05
  • 197KB
  • 下载

练习使用for、while、do while、foreach in等循环语句

  • 2014年10月29日 13:34
  • 81KB
  • 下载

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

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

foreach下次我的下线

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

对Foreach语句测试

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

foreach循环实例

  • 2013年10月26日 15:55
  • 22KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于foreach的一些体会
举报原因:
原因补充:

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