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();
        }
    }

  

posted @ 2017-12-06 15:06  刚出炉的程序猿  阅读(2079)  评论(0)    收藏  举报