Unity- IEnumerable:foreach中不能修改item的值

問題:通過foreach循環(huán)遍歷IEnumerable是,修改其item值失敗,如下圖

原因探究:

1.IEnumerable接口內(nèi)部實現(xiàn)如下:

  public interface IEnumerable<out T> : IEnumerable
  {
    /// <summary><para>Returns an enumerator that iterates through the collection.</para></summary>
    IEnumerator<T> GetEnumerator();
  }

2.IEnumerator內(nèi)部實現(xiàn)如下

  public interface IEnumerator
  {
    /// <summary><para>Advances the enumerator to the next element of the collection.</para></summary>
    bool MoveNext();

    /// <summary><para>Gets the current element in the collection.</para></summary>
    object Current { get; }

    /// <summary><para>Sets the enumerator to its initial position, which is before the first element in the collection.</para></summary>
    void Reset();
  }

3.foreach遍歷機制相當于通過Enumerator的MoveNext方法和Current屬性進行遍歷,上圖代碼等價于下圖:


4.總結:IEnumerator的Current屬性值定義就只有get沒有set,所以其是只讀的,不可修改

解決方案:將IEnumerable轉(zhuǎn)成List,在List中Current會被重寫并允許修改,如下圖:

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1.迭代器 ??首先我們要談的就是迭代器,很多情況下我們都使用了迭代器,并不僅僅是因為協(xié)程,當我們使用foreac...
    joshuaAS閱讀 3,087評論 1 4
  • 數(shù)據(jù)結構 一般將數(shù)據(jù)結構分為兩大類: 線性數(shù)據(jù)結構和非線性數(shù)據(jù)結構。 線性數(shù)據(jù)結構有: 線性表、棧、隊列、串、數(shù)組...
    沉麟閱讀 1,023評論 0 0
  • 什么是IEnumerable? 什么是IEnumerable?IEnumerable及IEnumerable的泛型...
    aslbutton閱讀 671評論 0 51
  • 關于這個話題,網(wǎng)絡上討論的很多,我也收集了一些資料,都不是很齊全,所以自己親自測試,這里把結果分享給大家。 for...
    AndrewFan閱讀 2,178評論 3 18
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂有人憂愁,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,897評論 28 54

友情鏈接更多精彩內(nèi)容