zoukankan      html  css  js  c++  java
  • C#foreach

    foreach可以遍历一些数据类型。由图可知,被遍历的数据类型必须拥有GetEnumerator的公共方法。

    在使用foreach遍历时涉及到var推断类型,这时如何不是实现泛型版本,则一律是object类型。

    foreach遍历只能读取数据,不能修改数据,可以通过string检测,string是可遍历的,但是组成它的char是不能改变的。(只在次情景下)。

    foreach遍历只进,一条一条往下读,和操作数据库的DataReader的Read方法类似。

    由上面的分析可知,需要在类的内部定义IEnumerator方法,才能被遍历。这里有两个办法解决。

    方法一、通过yield

    yield return 表达式;如果返回值为IEnumerable<T>则表示自动生成一个可迭代类型。

    如果返回值为IEnumerator<T>则表示自动生成一个迭代器。其中IEnumerator类型就一个迭代器。

    遍历时能以此拿到上图中person数组的值。

    方法二 通过实现IEnumerable接口

    IEunmerable包括GetEunmetator的方法,并且返回值是IEnumerator的类型。

    此时就需要另外一个类去继承IEnumerator接口,这样才能返回它的子类,即可达到目的。

    实现过程:

    1.需要添加int类型的变量,用于标记索引的位置。这里用int position=-1。

    2.添加对应的数组变量,用于接收传过来的数组。这里用string[] persion;

    3.实现的Curren属性,需要返回当前索引的数据。return person[position];

    4.实现MoveNext方法,需要将指针(索引)加1,向前移动,返回值是bool类型,用于确定是否操作了索引。

    5.实现Reset方法,这是重置方法,把position赋值为-1;

    6.添加一个带参数的构造函数,其中接收传递过来的数据。

    三、List集合分析

    通过反射工具可知,List集合的Add方法就是给内部的item添加值,而这个item是一个数组。因为是泛型的,所以显示为T。

    也就是其中集合的内部有这样一个变量,用来存储添加进来的数据,也就像上面自己定义的数组一样,这样List集合类就和上述

    自定义的类一致了,上述的定义只是为了演示过程,当然出于业务的需求,是可以自己去实现扩展上述类的,例如把静态的数据

    改变为Add方法添加,筛选数据的逻辑等,都可以根据业务需求进行扩展。

  • 相关阅读:
    springboot jpa 的使用
    《 mysiteforme 》 学习之wangEditor的使用
    《 mysiteforme 》 学习之layui table 的使用
    《 mysiteforme 》 学习之数据字典的使用
    Shiro + redis + 登录 + 记住我 + 验证码 + 登出(mysiteforme)
    spring boot 使用kindeditor上传传照片到nginx
    easypoi excel 文件导入导出
    猜年龄
    Kth number
    乌龟棋
  • 原文地址:https://www.cnblogs.com/xiaoai123/p/6945702.html
Copyright © 2011-2022 走看看