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语句

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis 有序集合(sorted set) 命令

目录 1.Redis Zrevrank 命令 - 返回有序集合中指定成员的排名&#xff0c;有序集成员按分数值递减(从大到小)排序简介语法可用版本: > 2.2.0返回值: 如果成员是有序集 key 的成员&#xff0c;返回成员的排名。 如果成员不是有序集 key 的成员&#xff0c;返回 nil 。 示例 2…

Linux_CentOS_7.9_MySQL_5.7配置数据库服务开机自启动之简易记录

前言&#xff1a; 作为运维保障&#xff0c;都无法准确预估硬件宕机的突发阶段&#xff0c;其生产数据实时在产出&#xff0c;那作为dba数据库服务的其重要性、必要性就突显而出。这里拿虚拟机试验做个配置记录&#xff0c;便于大家学习参考。 # 如出现服务器重启后登入报错无…

Unity组件开发--升降梯

我开发的升降梯由三个部分组成&#xff0c;反正适用于我的需求了&#xff0c;其他人想复用到自己的项目的话&#xff0c;不一定。写的也不是很好&#xff0c;感觉搞的有点复杂啦。完全可以在优化一下&#xff0c;项目赶工期&#xff0c;就先这样吧。能用就行&#xff0c;其他的…

【EI会议征稿通知】第三届智能电网与绿色能源国际学术会议(ICSGGE 2024)

第三届智能电网与绿色能源国际学术会议&#xff08;ICSGGE 2024&#xff09; 2024 3rd International Conference on Smart Grid and Green Energy 2024年第三届智能电网与绿色能源国际学术会议&#xff08;ICSGGE 2024&#xff09;将于2024年4月19-21日在中国成都举行。会议…

GraphQL和REST API的区别

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 GraphQL&#xff08;Graph Query Language&#xff09;和REST&#xff08;Representational State Transfer&#xff09;是两种用于构建和设计API的不同方法。以下…

基于ssm公交车信息管理系统论文

摘 要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于公交车信息的管理和控制&#xff0c;采用人工登记的方式保存相关数据&#xff0c;这种以人力为主的管理模式已然落后。…

vue2 element 弹出框拖拽会出现一层阴影问题

问题如图所示&#xff1a; 因增加 draggable 属性导致我弹窗表单清空文本框时&#xff0c;从右向左选中字体会出现拖拽阴影效果 去掉 draggable 即可 <template><div class"sys-jobTrigger-container"><el-dialog:visible.sync"state.isShowD…

上班经常迟到怎么办?

相信上班需要打卡的小伙伴都跟博主一样&#xff0c;经常可能因为迟一两分钟导致打开迟到而懊恼。 那么&#xff0c;如何避免这种问题呢&#xff1f;下面给大家提供一下博主自己试过的方法,效果还挺不错的 时间逆推法&#xff1a; 拿博主举例子&#xff0c;我住处到公司大概是…

react 基于Ant Desgin Upload简单实现导入 导出功能

效果图&#xff1a; 导入&#xff1a; 导出&#xff1a; 导入代码&#xff1a; const propsConfig {name: file,action: importDataExcelApi, //后端接口headers: {authorization: authorization-text,loginUserId: sessionStorage.getItem(userLogin)? JSON.parse(sessio…

C++完成使用map Update数据 二进制数据

1、在LXMysql.h和LXMysql.cpp分别定义和编写关于pin语句的代码 //获取更新数据的sql语句 where语句中用户要包含where 更新std::string GetUpdatesql(XDATA kv, std::string table, std::string where); std::string LXMysql::GetUpdatesql(XDATA kv, std::string table, std…

Spring——Spring基于注解的IOC配置

基于注解的IOC配置 学习基于注解的IOC配置&#xff0c;大家脑海里首先得有一个认知&#xff0c;即注解配置和xml配置要实现的功能都是一样的&#xff0c;都是要降低程序间的耦合。只是配置的形式不一样。 1.创建工程 1.1 pom.xml <?xml version"1.0" encoding…

基于SSM框架和Layui框架的管理系统

计算机毕业设计&#xff1a;打造安全、高效的信息管理系统在这个数字化时代&#xff0c;信息安全和高效管理是至关重要的。为了帮助学校或机构更好地管理和保护信息&#xff0c;我们为您设计了一套功能强大的信息管理系统。该系统利用先进的技术&#xff0c;结合MD5加密&#x…

excel中解决多行文本自动调整行高后打印预览还是显示不全情况

注意&#xff1a;此方法对于多行合并后单元格行高调整不适用&#xff0c;需要手动调整&#xff0c;如大家有简便方法&#xff0c;欢迎评论。 一、调整表格为自动调整行高 1&#xff09;点击此处全选表格 2&#xff09;在第一行序号单元格的下端&#xff0c;鼠标成黑十字时&am…

自定义页面,落地页面自由搭配

自定义页面 路径 应用 >> 新增自定义页面 功能简介 应用内新增「自定义页面」。 自定义页面是一个可以自由配置的落地页面&#xff0c;支持通过不同的入口设置连接到不同的链接地址&#xff0c;使得不同的应用资源可以根据业务场景化的展示。 使用场景&#xff1a; 一…

新手可理解的PyTorch线性层解析:神经网络的构建基石

目录 torch.nn子模块Linear Layers详解 nn.Identity Identity 类描述 Identity 类的功能和作用 Identity 类的参数 形状 示例代码 nn.Linear Linear 类描述 Linear 类的功能和作用 Linear 类的参数 形状 变量 示例代码 nn.Bilinear Bilinear 类的功能和作用 B…

设计一个LLMops的端到端业务流程需要哪些存储技术

周五晚上老哥们儿hengzi给我打电话说有没有大模型相关的存储相关的设计,答:没有现成的,后来我甩过去一个TP,PP,DDP的文档。仔细想想也对,也不对。对的是,确实是存储,但是只有显存里的存储,不对的是其实他想问的是端到端的,主要还是磁盘上的存储 然后我翻内网也没什么现…

进程、进程管理和计划任务

一、程序进程 1.1 什么是程序 是一组计算机能识别和执行的指令&#xff0c;运行于电子计算机上&#xff0c;满足人们某种需求的信息化工具 用于描述进程要完成的功能&#xff0c;是控制进程执行的指令集 二、进程 2.1 什么是进程&#xff1f; 记载到内存中运行&#xff…

二进制分析平台逆向编译器:Vector 35 Binary Ninja 软件详细功能介绍

Vector 35 Binary Ninja是一款为多种架构的反汇编提供第一方支持&#xff0c;包括 x86、x86-64、ARMv7&#xff08;带有 Thumb2&#xff09;、ARMv8 (AArch64)、PowerPC、6502、Z80 和 MIPS的反编译器&#xff0c;Binary Ninja为二进制分析构建了最好的自动化和 API。 Vector 3…

web期末作业动态时钟UI界面毛玻璃版

效果图 html代码奉上 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthde…

Callback Hook

一、Callback Hook 函数名&#xff1a;useCallback 用于得到一个固定引用值的函数&#xff0c;通常用它进行性能优化。 useCallback: 该函数只需要传入两个参数&#xff1a;一个回调函数和一个依赖数组即可。 1.函数&#xff0c;useCallback会固定该函数的引用&#xff0c;…