IEnumberable和IEnumberator理解

1、  IEnumberable接口很简单就一个GetEnumberator()方法;它返回的是一IEnumberator对象这是一个可以循环访问集合的对象。IEnumberator是一个集合访问器,没有他就不能使用foreach语句遍历集合或数组,因为只有IEnumberator才能访问集合中的项,IEnumberator定义了Current属性,MoveNext和Reset两个方法;Current用来获取集合中的项,MoveNext方法只是将游标内部位置向前移动(就是移到下一个元素);

2、  例子:

public class Book : IEnumerable

    {

        public string Name;                                                                           

        public string Price;                                                                               

        public Book(string name, string price)                                                      

        {

            Name = name;                                                                              

            Price = price;                                                                                     

        }

        private Book[] book;

        public Book(Book[] array) //

        {

            book = array;

        }

        public IEnumerator GetEnumerator()    //实现接口

        {

            return this.book.GetEnumerator();  //返回方法,用于 System.Array 的 System.Collections.IEnumerator。System.Array类型和其他许多类型(如List)已经实现了IEnumerable和IEnumerator接口,你可以简单委托请求到System.Array.

        }

}

Main方法

static void Main(string[] args)

        {

            Book[] book = new Book[3]        

            {

                new Book("水浒","21"),           

                new Book("三国","21"),  

                new Book("西游","21")

            };

            foreach (Book p in book) 

            {

                Console.WriteLine("书的名字:" + p.Name + ";价格: " + p.Price);

            }

            Console.WriteLine("用数组形式的输出");

            Book booklist = new Book(book);

            foreach (Book p in booklist)

            {

                Console.WriteLine("书的名字:" + p.Name + ";价格: " + p.Price);

            }

        }

上述代码就可以了,一个自定义的数组就可以使用foreach;

3、  手工实现IEnumberable接口和Ienumberator

class BookEnum : IEnumerator  //实现foreach语句内部,并派生

    {

        public Book[] _book; //实现数组

        int position = -1;//设置“指针”

        public BookEnum(Book[] list)

        {

            _book = list; //实现list

        }

        public bool MoveNext()//实现向前移动

        {

            position++;     //位置增加

            return (position < _book.Length);   //返回布尔值

        }

        public void Reset()     //位置重置

        {

            position = -1;

        }//重置指针为-1

        public object Current      //实现接口方法

        {

            get

            {

                try

                {

                    return _book[position];      //返回对象

                }

                catch (IndexOutOfRangeException)      //捕获异常

                {

                    throw new InvalidOperationException();     //抛出异常信息

                }

            }

        }

}

实现IEnumberable方法

        public IEnumerator GetEnumerator()    //实现接口

        {

            return new BookEnum (book);      //返回方法

        }

 

4、  IEnumberable<T>接口

他是一个强类型的,他为子对象的迭代提供了类型更加安全的方式;

转载于:https://www.cnblogs.com/heluo/archive/2012/03/09/2387488.html

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值