当前位置: 首页 > news >正文

C#IEnumberable<>

在C#中,IEnumerable<>是一个泛型接口,用于表示一个可枚举的集合。它定义了一个用于遍历集合元素的枚举器(enumerator)。通过实现IEnumerable<>接口,我们可以使用foreach语句或LINQ查询等方式来迭代访问集合中的元素。

IEnumerable<>接口定义了一个名为GetEnumerator的方法,该方法返回一个实现了IEnumerator<>接口的枚举器。IEnumerator<>接口提供了对集合中元素的访问和操作,它包含了MoveNext、Current和Reset等方法,用于在集合上进行迭代。

以下是一个使用IEnumerable<>接口的简单示例,展示了如何自定义一个可枚举的集合:

public class MyCollection<T> : IEnumerable<T>
{// 声明一个私有变量 items,用于存储集合元素private List<T> items = new List<T>();// 添加元素到集合的方法public void Add(T item){items.Add(item);}// 实现 IEnumerable<T> 接口的 GetEnumerator 方法public IEnumerator<T> GetEnumerator(){return items.GetEnumerator();}// 实现 IEnumerable 接口的 GetEnumerator 方法IEnumerator IEnumerable.GetEnumerator(){return GetEnumerator();}
}public class Program
{public static void Main(string[] args){// 创建一个 MyCollection<int> 类型的集合实例MyCollection<int> collection = new MyCollection<int>();// 向集合中添加元素collection.Add(1);collection.Add(2);collection.Add(3);// 使用 foreach 循环遍历集合中的元素,并输出到控制台foreach (int item in collection){Console.WriteLine(item);}}
}

在这段代码中:

  1. MyCollection<T> 类是一个泛型类,用于表示一个集合。它实现了 IEnumerable<T> 接口,表示该类的实例可以被枚举遍历。

  2. items 是一个私有变量,用于存储集合中的元素。它的类型是 List<T>,即一个泛型列表,用于动态地存储元素。

  3. Add 方法用于向集合中添加元素。它接受一个泛型类型的参数 item,并将其添加到 items 列表中。

  4. GetEnumerator 方法是 IEnumerable<T> 接口的实现方法。它返回一个 IEnumerator<T> 类型的枚举器,用于在集合上进行迭代。

  5. IEnumerable.GetEnumerator 方法是 IEnumerable 接口的实现方法。它返回一个非泛型的枚举器,通过调用上面的 GetEnumerator 方法来实现。

  6. Program 类的 Main 方法中,我们创建了一个 MyCollection<int> 类型的集合实例 collection

  7. 使用 collection.Add 方法将整数 1、2 和 3 添加到集合中。

  8. 使用 foreach 循环遍历集合中的元素,并将每个元素输出到控制台。


在上面的示例中,我们首先定义了一个名为MyCollection的类,实现了IEnumerable接口。这个类内部使用了List来存储元素,并提供了一个Add方法用于向集合中添加元素。

通过实现GetEnumerator方法来返回一个枚举器,我们使得MyCollection类可以被遍历。在Main方法中,我们创建了一个MyCollection实例,并使用foreach语句遍历集合中的元素并输出到控制台。

通过实现IEnumerable<>接口,我们可以方便地对自定义集合进行迭代操作,使得代码更加简洁、可读性更高。**

http://www.lryc.cn/news/108139.html

相关文章:

  • Flink非对齐checkpoint原理(Flink Unaligned Checkpoint)
  • Linux crontab命令:循环执行定时任务(详解)
  • Linux系统jenkins+newman+postman持续集成环境搭建
  • flutter:Future、Stream、RxDart
  • Jenkins安装、配置、自动化构建前(nodejs)后端(maven)项目
  • 【网络基础进阶之路】设计网络划分的实战详解
  • 艺术二维码 API 申请及使用
  • JVM GC ROOT分析
  • 记一道有趣的sql题
  • C高级【day2】
  • 认识Webpack插件Plugin;CleanWebpackPlugin插件;HtmlWebpackPlugin;DefinePlugin;Mode模式
  • Redis 6.0的新特性:多线程、客户端缓存与安全
  • 【雕爷学编程】MicroPython动手做(37)——驱动LCD与图文显示3
  • 自然语言处理从入门到应用——LangChain:提示(Prompts)-[提示模板:序列化提示信息]
  • 【LinearAlgebra】Chapter 12 - Linear Algebra in Probability Statistics
  • webshell详解
  • 数据结构 | 搜索和排序——搜索
  • 【python】对象
  • k8s概念-污点与容忍
  • “从零开始学习Spring Boot:构建高效、可扩展的Java应用程序“
  • 通向架构师的道路之tomcat集群
  • 结构体,枚举,联合大小的计算规则
  • Vue2 第十七节 Vue中的Ajax
  • ES6 - 字符串新增的一些常用方法
  • 最新SQLMap安装与入门技术
  • Java 使用 Google Guava 实现接口限流
  • 帮助中心的价值是什么?怎样才能在线搭建官网网站帮助中心?
  • Kubernetes——理论基础
  • 【VUE3】
  • 《金融数据保护治理白皮书》发布(137页)