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