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方法添加,筛选数据的逻辑等,都可以根据业务需求进行扩展。

  • 相关阅读:
    小峰视频十三:二维数组
    小峰视频十二:java数组
    小峰视频十一:循环结构的跳出
    小峰视频十:循环while、for
    小峰视频九:选择语句if、switch
    小峰视频八:逻辑运算符、关系运算符、三门运算符
    小峰视频七:数据类型转换、数据运算
    eggjs+vue实现下载图片 js下载网络图片
    报错/Warning: You should not use <Route component> and <Route children> in the same route; <Route component> will be ignored
    React/事件系统
  • 原文地址:https://www.cnblogs.com/xiaoai123/p/6945702.html
Copyright © 2011-2022 走看看