编程语言
首页 > 编程语言> > C#中foreach语句的迭代器实现机制

C#中foreach语句的迭代器实现机制

作者:互联网

原文链接:http://www.cnblogs.com/riasky/p/3481600.html

C#中的foreach语句可用于循环遍历某个集合中的元素,而所有的只要支持了IEnumerable或IEnumerable<T>泛型接口的类型都是可以

用foreach遍历的。其具体的遍历实现过程就是利用C#中的迭代器中的方法来按照特定顺序遍历的。在.NET中IEnumerator和IEnumerator<T>

就是对迭代器的抽象,如果要自定义的类型也支持foreach循环则首先须要声明该类支持IEnumerable或IEnumerable<T>接口,然后再去实现自己

的支持了IEnumerator<T>的迭代器类型;唉,先看代码吧!


---------YYC

For Example:

 

//  实现了IEnumerable<T>泛型接口的类

 

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Pra6
{
    public enum PhoneType
    { 
     家庭电话,办公电话,手机,小灵通,传真
    }

    class Phones : IEnumerable<string>
    {
        private string[] phones;
        private int count = 0;
        public int Count {
            get { return count; }
        }
        public string this[PhoneType type]
        {
            get { 
               return phones[(int)type];
            }
            set { 
              int index  =  (int)type;
              if (phones[index] == null && value != null)
              {
                  count++;
              }
              else
                  if (phones[index] != null && value == null)
                  {
                      count--;
                  }
              phones[index] = value;
            }
        }

        public Phones()
        {
            phones = new string[5];
        }
        public void CopyTo( Array array,int index)
        { 
          foreach(string s in phones )
          {
              if (s != null)
                  array.SetValue(s,index++);
          }
        }
      public   IEnumerator<string > GetEnumerator()//返回迭代器
        {
            return new MyEnumerator<string>(phones);
        }
        IEnumerator IEnumerable.GetEnumerator()//返回迭代器,由于IEnumerable<T>接口也继承了IEnumerable接口所以出于兼容性考虑,最后也要实现该方法,但内容可//以和上面的代码一样
        {
            return this.GetEnumerator();
        }

    }
}

标签:index,迭代,C#,phones,IEnumerable,System,foreach,using,public
来源: https://blog.csdn.net/weixin_30650039/article/details/96741525