C#自定义可foreach的类型

1.不一定要实现 IEnumerable接口;

2.类中定义与 IEnumerable接口中的GetEnumerator()方法相同的方法即可(方法名,返回值,参数都一致)。

    class Program
    {
        static void Main(string[] args)
        {
            int[] array = { 1, 2, 3, 4, 5 };
            IntArray intArray = new IntArray(array);
            //测试,可以使用foreach
            foreach (int i in intArray)
            {
                //do some things
            }
        }

        /// <summary>
        /// 自定义IntArray类
        /// 注意:
        ///     1.没有实现IEnumerable接口
        ///     2.类中定义了GetEnumerator()方法,该方法与IEnumerable接口中的方法一致
        /// </summary>
        private class IntArray
        {
            private int[] m_array;
            public IntArray(int[] array)
            {
                m_array = array;
            }
            public IEnumerator GetEnumerator()
            {
                //注意:需要返回一个实现了IEnumerator接口的对象
                return new MyEnumerator(m_array);
            }
        }

        private class MyEnumerator : IEnumerator
        {
            private int index = -1;//记录当前迭代器的位置,初始为-1
            private int[] intArray;//当前集合

            public MyEnumerator(int[] array)
            {
                intArray = array;
            }

            //实现接口方法
            public object Current
            {
                get { return intArray[index]; }
            }

            //实现接口方法
            public bool MoveNext()
            {
                index++;
                if (index < intArray.Length)
                {
                    return true;
                }
                return false;
            }

            //实现接口方法
            public void Reset()
            {
                index = -1;
            }
        }
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值