c# 学习笔记 - 枚举

文章目录

    • 1. 枚举
      • 1.1 枚举结构梳理
      • 1.2 枚举完整代码
      • 1.3 枚举知识点补充
    • 2. 迭代两种命名空间接口
    • 3. yield语句

1. 枚举

1.1 枚举结构梳理

  结构图
在这里插入图片描述
  上图内容可能依旧不通俗易懂,这里使用最简明的话语告诉大家实现方式.

  1. foreach语句就是集合的遍历操作,我们如果想要完成一个集合的遍历操作我们需要做哪些操作呢?毫无疑问的,我们首先需要拥有元素的读取操作,还需要一个数据的滚动操作(读取下一个元素)。这两个通用的方法读取操作我们设置为Current属性,滚动操作设置为MoveNext方法,这些东西全部都被我们封装到IEnumerator接口当中,我们通过实现这个接口完成相应的操作
    在这里插入图片描述
public class Data : IEnumerator{public int[] data = {1, 2, 3, 4, 5};int position = -1;object IEnumerator.Current{get{return data[position];}}public bool MoveNext(){position++;return (position < 5);}public void Reset(){position = -1;}
}
  1. 最核心的步骤IEnumerator接口完成了,现在我们需要关心的就是如何在类当中让我们可以找到这个接口,这个时候我们其实只需要实现一个名为GetEnumerator()的方法即可,这个方法需要返回实现IEnumerator接口的实现类即可
public class GetDate{public IEnumerator GetEnumerator(){return new Data();}
}
  1. 最后就可以使用了,foreach先去类里面找GetEnumerator()方法,通过这个方法拿到IEnumerator接口的实现类,再通过这个实现类内部定义的操作对数据进行遍历,这个就是foreach关键字的调用原理
static void Main(){GetDate getDate = new GetDate();foreach(int x in getDate){Console.WriteLine(x);}
}

1.2 枚举完整代码

using System;
using System.Collections;public class Data : IEnumerator
{public int[] data = {1, 2, 3, 4, 5};int position = -1;object IEnumerator.Current{get{return data[position];}}public bool MoveNext(){position++;return (position < 5);}public void Reset(){position = -1;}
}public class GetDate{public IEnumerator GetEnumerator(){return new Data();}
}class App{static void Main(){GetDate getDate = new GetDate();foreach(int x in getDate){Console.WriteLine(x); // 输出: 1 2 3 4 5}}
}

1.3 枚举知识点补充

  1. 通过上述步骤我们其实已经大概了解了foreach的内部调用原理了,但是对于手写的GetEnumerator方法我们推出了一个新的接口IEnumerable去包装它,其实它的本质也就是代替了我们在方法当中手写GetEnumerator,也是一个很好的纠错提示,这样子可以更好的防止我们自己手写方法名字错误
    在这里插入图片描述
public class GetDate : IEnumerable{ // 和我们上述步骤的方法没有太大区别,也就是加入一个接口的实现public IEnumerator GetEnumerator(){return new Data();}
}

2. 迭代两种命名空间接口

  1. 非泛型命名空间:System.Collection
    在这里插入图片描述
    在这里插入图片描述
  1. 泛型命名空间:System.Collection.Generic.IEnumerator
    在这里插入图片描述
    在这里插入图片描述

3. yield语句

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/329750.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

车辆运动学方程推导和代码实现

文章目录 1. 运动学方程2. 模型实现 1. 运动学方程 自行车模型&#xff08;Bicycle Model&#xff09;是车辆数字化模型中最常见的一种运动学模型。其除了可以反映车辆的一些基础特性外&#xff0c;更重要的是简单易用。通常情况下我们会把车辆模型简化为二自由度的自行车模型…

源码编译部署篇(二)源码编译milvus成功后如何启动standalone并调试成功!

Milvus启动和调试 0 前言1 Milvus启动【问题描述】出现Aborted问题【问题分析】【解决方法】安装Pulsar服务执行单机启动命令解决监听端口号 2 Milvus调试编写launch.json验证单例调试成功 3 遇到的问题汇总问题1问题2:Permission denied 0 前言 由于Milvus官方文档只提及如何…

Windows:笔记本电脑设置休眠教程

前言 不知道大家在使用【Windows】笔记本有没有这个习惯&#xff0c;我会把他的电池选项的【休眠】设置进行打开。因为作为我们开发人员电脑一般是一周关一次机&#xff0c;有时候一个月关一次机。这时候【休眠】功能就给我们提供了一个好处&#xff0c;我们选择了【休眠】后电…

web期末作业网页设计——JavaScript

目录 一.作品简介 二.网页效果 首页 花语 登录界面 注册界面 三.网页代码 首页 登录界面 注册界面 视频界面 一.作品简介 网站系统文件种类包含&#xff1a;html网页结构文件、css网页样式文件、js网页特效文件、images网页图片文件。 网页作品代码简单&#xff…

书生·浦语大模型实战营 Lesson 1

书生浦语大模型全链路开源体系 书生浦语大模型开源历程 书生浦语大模型系列 从模型到应用 数据 预训练 微调 部署

如何写html邮件 —— 参考主流outook、gmail、qq邮箱渲染邮件过程

文章目录 ⭐前言⭐outlook渲染邮件⭐gmail邮箱渲染邮件⭐qq邮箱渲染邮件 ⭐编写html邮件&#x1f496;table表格的属性&#x1f496;文本&#x1f496;图片&#x1f496;按钮&#x1f496;背景图片 ⭐总结⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于 …

Android WiFi 连接

Android WiFi 连接 1、设置中WiFi显示2、WiFi 连接流程2.1 获取PrimaryClientModeManager2.2 ClientModeImpl状态机ConnectableState2.3 ISupplicantStaNetworkCallback 回调监听 3、 简要时序图4、原生低层驱动5、关键日志 1、设置中WiFi显示 Android WiFi基础概览 packages/a…

mybatisPlus CodeGenerator 代码生成

在 test 目录下新建 CodeGenerator 类&#xff0c;用于 mybatis-plus 自动生成 java 代码 package com.edward;import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.OutputFile; import com.baomidou.mybatisplu…

ECMAScript简介及特性

ECMAScript&#xff0c;通常简称为ES&#xff0c;是一种由ECMA&#xff08;欧洲计算机协会&#xff09;国际组织标准化和推动的脚本语言规范。它被广泛用于Web浏览器和服务器端编程&#xff0c;是JavaScript的基础。 ECMAScript的起源可以追溯到1996年&#xff0c;当时Netscape…

HCIP-端口隔离、arp代理、聚合vlan、QinQ

目录 一&#xff0c;端口隔离&#xff08;同vlan间同交换机下的端口隔离技术&#xff09; 端口隔离原理&#xff1a; 双向隔离配置 4&#xff0c;端口隔离特殊使用&#xff1a;单向隔离 6&#xff0c;ARP代理 6.1 路由式代理 6.2 VLAN内ARP代理 6.3 VLAN间ARP代理 6.3…

Apache 配置与应用

目录 前言 1.1 Apache连接保持 1.2 Apache 的访问控制 1.2.1 客户机地址限制 1.2.2 用户授权限制 1.2.2.1 创建用户认证数据文件 1.2.2.2 添加用户授权配置 1.2.2.3 验证用户访问授权 ​编辑 1.3 Apache 日志分割 1.3.1 Apache 自带rotatelogs 分割工具 1.3.2 使用第…

Docker nginx容器代理播放m3u8视频文件(HLS)

文章目录 Docker Nginx容器代理播放M3U8文件教程获取Nginx Docker镜像设置Nginx配置文件用 ffmpeg 将 MP4 文件转换成 m3u8 文件运行Docker容器测试M3U8流其他问题我用vlc都能播放http://192.168.121.50/forest4kTest.m3u8和http://192.168.121.50/forest4kTest.mp4&#xff0c…