关于foreach的困惑,或许也涉及多态和集合,搞不清楚

关于foreach的疑惑,或许也涉及多态和集合,搞不清楚
关于foreach的困惑,或许也涉及多态和集合,搞不清楚

ArrayList里是用object来存储元素的,为啥foreach的时候不用object的变量来接收?

谁要回答的让我明白了,爷重重有赏!关于foreach的困惑,或许也涉及多态和集合,搞不清楚

关于foreach的困惑,或许也涉及多态和集合,搞不清楚新人求罩,求师傅!
------解决方案--------------------
比如
ArrayList x=new ArrayList();
x.Add(10);
x.Add("SS");

foreach(string s in x)
{
}


编译器展开成等价如下形式的代码:
ArrayList x=new ArrayList();
x.Add(10);
x.Add("SS");

IEnumerator enumerator = (x).GetEnumerator();
try {
   while (enumerator.MoveNext()) {
      string element = (string)enumerator.Current; // here is casting occures **************
      // loop body;
   }
}
finally {
   IDisposable disposable = enumerator as System.IDisposable;
   if (disposable != null) disposable.Dispose();
}

注意编译器会在***********处增加强制类型转换。

如果ArrayList中的元素不都是string,会报运行时错误。
------解决方案--------------------
lz 你是拿网络上的文章来故意提问吧?

随便搜一下就有一堆类似文章:http://www.cnblogs.com/yukaizhao/archive/2011/10/19/csharp_box_unbox_2.html
------解决方案--------------------
从你的标题就能看出,你肯定不是自己想出的这个问题,而是照抄人家文章里的个别字眼儿,然后故意来提问。

建议你提问时列出你之前已经过的参考文章。
------解决方案--------------------
如果foreach需要你自己强制转换,那跟for还有任何区别?
------解决方案--------------------
引用:
Quote: 引用:

从你的标题就能看出,你肯定不是自己想出的这个问题,而是照抄人家文章里的个别字眼儿,然后故意来提问。

建议你提问时列出你之前已经过的参考文章。

冏,我有那么无聊吗?
我看《C井入门经典》第六版239页的代码时碰到的

我认为LZ并不是故意来提问的。
或许你听说过“不完全信息静态博弈”这个概念,显然一个人遇到的问题,99.999999%在Internet上面都能找到答案。但为啥还是会有那么多人提问?互联网是一个巨大的信息数据库,但是并不是所有人都完全掌握的。
ArrayList x=new ArrayList(); x.Add(10); x.Add("SS");   foreach(string s in x) { } 

如这段代码,foreach语句也可以这样写:
                foreach (Object stemp in x)
                {
                    Console.WriteLine(stemp.ToString() + " ");
                }


foreach语句相比for的好处在于同样实现遍历,但去掉了迭代器,不需要进行边界检查。要知道数组越界是常见问题。