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

以上就是C#中foreach实例代码的详细内容,更多请关注php中文网其它相关文章!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

  • 相关标签:C#foreach csharp .net
  • 程序员必备接口测试调试工具:点击使用

    Apipost = Postman + Swagger + Mock + Jmeter

    Api设计、调试、文档、自动化测试工具

    网页生成APP,用做网站的技术去做APP:立即创建

    手机网站开发APP、自助封装APP、200+原生模块、2000+映射JS接口按需打包

    • 上一篇:分享一个磁盘文件查看系统
    • 下一篇:H5结合百度map实现GPS定位的实例教程

    相关文章

    相关视频


    • c语言中goto语句的含义是什么
    • C/C++深度分析
    • C#中GDI+编程10个基本技巧二
    • 应用绝对路径与相对路径
    • C#中foreach实例代码
    • Vue3 事件修饰符
    • vue3 指令
    • vue3 基础语法
    • vue3 组合api和选项api介绍

    视频教程分类

    • php视频教程
    • html视频教程
    • css视频教程
    • JS视频教程
    • jQuery视频教程
    • mysql视频教程
    • Linux视频教程
    • Python视频教程
    • Laravel视频教程
    • Vue视频教程

    专题

    C#中foreach实例代码