【C#】foreach迭代变量只读的原因

来源:互联网 发布:淘宝上买徕卡 编辑:程序博客网 时间:2024/05/17 06:47

先看下面两个接口:

namespace System.Collections{    // 摘要:    //     支持对非泛型集合的简单迭代。    [ComVisible(true)]    [Guid("496B0ABF-CDEE-11d3-88E8-00902754C43A")]    public interface IEnumerator    {        // 摘要:        //     获取集合中的当前元素。        //        // 返回结果:        //     集合中的当前元素。        //        // 异常:        //   System.InvalidOperationException:        //     枚举数定位在该集合的第一个元素之前或最后一个元素之后。        object Current { get; }        bool MoveNext();        void Reset();    }}namespace System.Collections{    // 摘要:    //     公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。    [ComVisible(true)]    [Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")]    public interface IEnumerable    {        // 摘要:        //     返回一个循环访问集合的枚举数。        //        // 返回结果:        //     可用于循环访问集合的 System.Collections.IEnumerator 对象。        [DispId(-4)]        IEnumerator GetEnumerator();    }}

每个实现的迭代器,返回类型必须为 IEnumerable、IEnumerator、IEnumerable<T> 或 IEnumerator<T>。foreach中的迭代变量是即为IEnumerable、IEnumerator、IEnumerable<T> 或 IEnumerator<T>类型。从上面的接口可以看出,object Current是只读的,因此,foreach迭代变量只能是只读的。

另:

foreach中的迭代变量本来就是只读,不可修改的。
对值类型中的属性赋值,会改变值类型对象在栈上的内存分步,所以实际上就是对值类型对象本身重新赋值了

原创粉丝点击