• 大话C#中能使用foreach的集合的实现


    大家都知道foreach的语法:
    foreach(var item in items)
    {
    Console.Writeln(item);
    }

    通过这样一个简单的语句,就能实现遍历集合items中的所有元素。
    那么,集合类(注意不是集合中的元素的类)是要满足什么条件才能用foreach遍历呢?
    就像买衣服需要去找到卖衣服的人一样,要使用foreach,集合类必须要实现GetEnumerator()方法。
    这里的GetEnumerator就相当于商城里的售货员,穿着统一的服装,任务就是买衣服(程序里的任务是实现遍历集合)。
    当然了,售货员可以是个体户,也就是说,你可以自己直接实现GetEnumerator()方法;也可以是某个公司统一培训上岗的(程序里就是
    实现了IEnumerable接口的。)只要是这个公司培训上岗的员工,一定是能够卖衣服。同理,只要实现了IEnumerable接口,就一定能够用
    foreach遍历!
    那么,实现了IEnumerable接口必然要重写GetEnumerator()方法。GetEnumerator()方法就让这个集合类获得了遍历的方法。
    而这个遍历的方法是有一定的共性的,比如,获取当前索引对应的元素(GetCurrent)啦, 移动到下一个元素啦(MoveNext)啦,等等等等。
    就好比买衣服培训一样,有一套统一的流程,大家卖衣服的流程都差不多(进货、上货、叫卖等等)。
    既然这么有共性,那么就给封装成一个IEnumerator接口吧,这个接口里就包括获取当前索引对应的元素(GetCurrent)啦, 移动到下一个
    元素(MoveNext)等等的方法,等待你去实现。这样,你只需要写一个实现了IEnumerator接口的类(假设是MyArrayEnumerator),构造函数里将你要写的集合类的
    元素集合传进去处理。那么你再在集合类的GetEnumerator()方法里写上 return new MyArrayEnumerator()即完成了遍历集合的“上岗培训”。

  • 相关阅读:
    MyCAT常用分片规则之分片枚举
    MySQL参数
    CentOS 7下MySQL服务启动失败的解决思路
    ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    CHECK_NRPE: Received 0 bytes from daemon. Check the remote server logs for error messages.
    MyCAT实现MySQL的读写分离
    搭建Spark的单机版集群
    如何部署Icinga服务端
    MyCAT简易入门
    如何部署Icinga客户端
  • 原文地址:https://www.cnblogs.com/tangzhengyue/p/3339936.html
Copyright © 2020-2023  润新知