【C#】foreach迭代變量只讀的原因

先看下面兩個接口:

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中的迭代變量本來就是隻讀,不可修改的。
對值類型中的屬性賦值,會改變值類型對象在棧上的內存分步,所以實際上就是對值類型對象本身重新賦值了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章