c#中foreach原理


c#中實現了 IEnumerable或 IEnumerable<T>接口的類才可以作為foreach對象

c#中Foreach不會解析成IL中的foreach,比如下面的代碼

foreach (var item in persons)
            {
                Console.WriteLine(item);
            }

  在c#中會解析成類似於這樣的代碼,首先調用GetEnumerator方法獲得一個枚舉器,然后在MoveNext方法中只要返回為true就用Current獲得當前元素

IEnumerator enumerator = persons.GetEnumerator();
            while (enumerator.MoveNext())
            {
                Console.WriteLine(enumerator.Current);
            }

  IEnumerable接口的實現方法

public class Persons : IEnumerable
    {
        public string first;
        public string last;
        public IEnumerator GetEnumerator()
        {
            string current = first;
            while (current != null)
            {
                yield return current;
                current = last;
            }
            
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM