黑马程序员:C#基础篇(五)迭代与泛型

本文介绍了C#中的迭代器和泛型。迭代器允许在类或结构中支持foreach循环,无需实现完整的'IEnumerable'接口,而泛型则提供了类型参数化的集合操作,增强了代码的复用性和安全性。文章详细讲解了迭代器的工作原理,包括IEnumerator、IEnumerable接口,以及如何自定义迭代器。同时,探讨了泛型类和泛型方法的应用,以及在设计泛型时需要考虑的问题。
摘要由CSDN通过智能技术生成

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

迭代

迭代器是方法、get访问器或运算符;使得在类或结构中能够支持foreach循环,而不必实现整个“IEnumerable接口,只要提供一个迭代器即可。当编译器检测到迭代器时,会自动生成IEnumerable或IEnumerator接口的Current属性、MoveNext和Reset方法。

说到迭代器,不得不说四个接口,IEnumerator、IEnumerable、IEnumerator<T>、IEnumerable<T>

IEnumerator支持在集合上进行简单的迭代,通过元数据查看到的定义如下:

        public interface IEnumerator
        {
            // 摘要:
            //     获取集合中的当前元素。
            //
            // 返回结果:
            //     集合中的当前元素。
            object Current { get; }

            // 摘要:
            //     将枚举数推进到集合的下一个元素。
            //
            // 返回结果:
            //     如果枚举数成功地推进到下一个元素,则为 true;如果枚举数越过集合的结尾,则为 false。
            //
            // 异常:
            //   System.InvalidOperationException:
            //     在创建了枚举数后集合被修改了。
            bool MoveNext();
            //
            // 摘要:
            //     将枚举数设置为其初始位置,该位置位于集合中第一个元素之前。
            //
            // 异常:
            //   System.InvalidOperationException:
            //     在创建了枚举数后集合被修改了。
            void Reset();
        }
IEnumerable是一个公开枚举数,如下:
    public interface IEnumerable
    {
        // 摘要:
        //     返回一个循环访问集合的枚举数。
        //
        // 返回结果:
        //     一个可用于循环访问集合的 System.Collections.IEnumerator 对象。
        [DispId(-4)]
        IEnumerator GetEnumerator();
    }

后两个其实就是前两个加上一般参数,用于泛型集合上的迭代。

 

foreach通常只能作用于包含了GetEnumerator方法的公共定义的类型的变量(就是IEnumerable接口、IEnumerable<T>接口中定义的那个方法)想用foreach就要有迭代器,可以继承自接口也可以在类中直接定义迭代器(返回一个IEnumerable或者IEnumerable<T>类型的话方法名无约束,但是想返回IEnumerator或IEnumerator<T>的话那方法名就必须是GetEnumerator),例子:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值