zoukankan      html  css  js  c++  java
  • C# IEnumerable和IEnumerator的区别,如何实现

    IEnumerable接口和IEnumerator接口是.NET中非常重要的接口,二者有何区别?

        1. 简单来说IEnumerable是一个声明式的接口,声明实现该接口的类就是“可迭代的enumerable”,但并没用说明如何实现迭代器(iterator).其代码实现为:

             public interface IEnumerable
             {
                    IEnumerator GetEnumerator();
              }
        2. 而IEnumerator接口是实现式接口,它声明实现该接口的类就可以作为一个迭代器iterator.其代码实现为:

            public interface IEnumerator
           {
                    object Current { get; }

                    bool MoveNext();
                    void Reset();
            }

       3.一个collection要支持Foreach进行遍历,就必须实现IEnumerable,并一某种方式返回迭代器对象:IEnumerator.

       那么又如何实现这两个接口呢? 其代码如下:

      假设有一个Person类,其有两个属性FirstName和LastName

      public class Person
        {
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public Person(string firstName, string lastName)
            {
                this.FirstName = firstName;
                this.LastName = lastName;
            }
        }

    另外通过People类来实现IEnumerable和IEnumerator接口.

    //实现IEnumerable接口

    public class People :IEnumerable

    {

       public Person [] pers;

       public People(Person [] ps)

        {

          this.pers = ps;

        }

        public IEnumerator GetEnumerator()

        {

             //foreach(Person p in pers)

             // {

                 //  yield return p;

              // }

          return new People1(pers);

          }

    }

      //实现IEnumerator接口

       public class People1 : IEnumerator
        {
            public Person[] pers;
            public People1(Person[] per)
            {
                this.pers = per;
            }
            int position = -1;

            public bool MoveNext()
            {
                position++;
                return position < pers.Length;
            }
            public void Reset()
            {
                position=-1;
            }
            public object Current
            {
                get
                {
                   try
                   {
                       return pers[position];
                   }
                    catch(IndexOutOfRangeException ex)
                    {
                        throw new InvalidOperationException();
                    }
                }
            }
        }

  • 相关阅读:
    学业优秀者汇总
    计算机类教学质量国家标准(含信息安全专业)
    从《构建之法》到《终身幼儿园》
    2019-2020-1 《信息安全专业导论》教学进程
    程序设计快速入门
    铜齿铁牙UP计划
    ios app 提交评审注意事项
    IOS开发之不同版本适配问题2(#ifdef __IPHONE_7_0)
    iOS:个性化UITextView(缩进,行距,铺满)
    iOS 同一设备内的应用之间资源共享的实现
  • 原文地址:https://www.cnblogs.com/mamxfx/p/7148176.html
Copyright © 2011-2022 走看看