C#2.0新特性—迭代器

C# 2.0新特性:泛型、迭代器与闭包的探索 本文深入探讨了C# 2.0引入的关键语言扩展,包括泛型、匿名方法、迭代器和部分类型。重点解析泛型带来的强类型安全性、代码复用性和性能优化,以及如何通过迭代器简化集合操作,并介绍了闭包的概念和在C#中的应用。同时,文章也探讨了部分类型的使用场景及其对代码维护的贡献。 阅读详情

迭代器是 C# 2.0 中的新功能。迭代器是方法、get 访问器或运算符,它使您能够在类或结构中支持 foreach 迭代,而不必实现整个 IEnumerable 接口。您只需提供一个迭代器,即可遍历类中的数据结构。当编译器检测到迭代器时,它将自动生成 IEnumerable 或 IEnumerable 接口的 Current、MoveNext 和 Dispose 方法。  

一、迭代器概述

1、迭代器是可以返回相同类型的值的有序序列的一段代码。
2、迭代器可用作方法、运算符或 get 访问器的代码体。
3、迭代器代码使用 yield return 语句依次返回每个元素。yield break 将终止迭代。
4、可以在类中实现多个迭代器。每个迭代器都必须像任何类成员一样有唯一的名称,并且可以在 foreach 语句中被客户端代码调用,如下所示:foreach(int x in SampleClass.Iterator2){}
5、迭代器的返回类型必须为 IEnumerable、IEnumerator、IEnumerable 或 IEnumerator。

yield 关键字用于指定返回的值。到达 yield return 语句时,会保存当前位置。下次调用迭代器时将从此位置重新开始执行。

迭代器对集合类特别有用,它提供一种简单的方法来迭代不常用的数据结构(如二进制树)

二、示例

在本示例中,DaysOfTheWeek 类是将一周中的各天作为字符串进行存储的简单集合类。foreach 循环每迭代一次,都返回集合中的下一个字符串。

public class DaysOfTheWeek : System.Collections.IEnumerable
{
    
string[] m_Days = { "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat" };

public System.Collections.IEnumerator GetEnumerator()
    {
        
for (int i = 0; i < m_Days.Length; i++)
        {
            
yield return m_Days[i];
        }
    }
}

class TestDaysOfTheWeek
{
    
static void Main()
    {
        
// Create an instance of the collection class
        DaysOfTheWeek week = new DaysOfTheWeek();

        
// Iterate with foreach
        foreach (string day in week)
        {
            System.Console.Write(day 
+ " ");
        }
    }
}


C#编程语言权威指南读后感 本文是对《C#编程语言》一书的读后感,书中由C#的创造者之一Anders Hejlsberg及其团队编写,详细介绍了C#语言的发展、核心概念以及C# 2.0的新增特性。文章总结了书中主要内容,并分享了个人学习C#语言的心得体会。... 阅读详情

相关推荐

Unity 2021 LTS安装避坑指南:从下载到第一个3D项目的完整流程

本文提供了一份详尽的Unity 2021 LTS安装与首个3D项目创建指南。内容涵盖从Unity Hub下载、版本选择、模块安装避坑,到编辑器界面解析、创建旋转立方体脚本的完整流程,旨在帮助初学者快速搭建稳定开发环境并上手核心操作。

mango的博客 308

C# 2.0 新特性之迭代器, Yield Return

本文摘自:http://www.cnblogs.com/montaque/archive/2005/04/21/142844.htmlC# 2.0 可能讨论比较多的是泛型, 其次可能就是迭代器,匿名方法了. 这两个特性其实有些本质上的不同, 泛型, 是相对1.1微软在 IL 上面又添加了一些指令来实现. 而迭代器则是在编译器这个层次去实现的,也就是说C# 2.0 中的迭代器的特性并

VS_URL的专栏 1666

使用Qt Creator调用eBUS SDK

在新界面,勾选左下角“ Show unreachable Network Devices",可以看到没有成功连接的网络相机,原因是IP地址配置错误。每个版本的OpenCV的依赖项的名字都不同,我这里是opencv_world490.lib与opencv_world490d.lib。函数,可以看到在这里是图像缓存区,能够对捕获的图像进行一些操作。在Visual Studio打开项目属性,在VC++目录这里,把Opencv的路径添加进去。这时,会自动跳转到mainwindow.cpp,生成该按钮对应的槽函数。

qq_35685051的博客 1288

第1节 C#2.0新特性之四:迭代器

  迭代器        迭代器是一种方法、get 访问器或运算符,它通过使用 yield 关键字对数组或集合类执行自定义迭代。yield 返回语句会导致源序列中的元素在访问源序列中的下一个元素之前立即返回给调用方。尽管您以方法的形式编写迭代器,但编译器会将其转换为一个实际上是状态机的嵌套类。只要客户端代码中的 foreach 循环继续进行,此类就会跟踪迭代器的位置。 

powersea2的专栏 297

从ISO 17987到SAE J2602:LIN一致性测试标准全景解读与CANoe实现

本文深入解析了从ISO 17987到SAE J2602的LIN一致性测试标准技术演进,详细对比了两大标准体系的技术差异,并基于Vector CANoe平台演示了如何构建符合最新行业要求的自动化测试方案。文章重点介绍了SAE J2602标准的三大改进点,包括唤醒特性、传输层协议和诊断服务的增强测试要求,并提供了CANoe测试环境配置、测试模块集成及测试案例解析的实战指南。

app77的博客 335

从零开始:如何用Kimi OK Computer快速生成专业级数据分析报告和PPT(附实战案例)

本文详细介绍了如何利用Kimi OK Computer智能体模式,从零开始快速生成专业级数据分析报告和演示文稿。通过实战案例,解析了其任务规划、联网搜索、多工具协同和内容排版等核心能力,并提供了精准指令构造、工作流引导及成果精修的完整步骤,帮助用户高效完成从数据到成品的端到端交付。

weixin_29284201的博客 369

c#2.0新特性:(三)迭代器(Iterators)

C#2.0中的迭代器可以更加方便地编写应用于foreach语句的枚举集合。

十二随风 391

Zipformer实战:5分钟快速搭建语音识别模型(附LibriSpeech测试结果)

本文提供了一份详细的Zipformer语音识别模型实战指南。通过清晰的步骤,指导读者在5分钟内完成从环境配置、LibriSpeech数据集准备到模型训练与测试的全过程。文章重点解析了关键配置参数,并分享了在LibriSpeech测试集上的性能结果,帮助开发者快速评估和应用这一高效的语音识别架构。

weixin_35578748的博客 161

知识点 - C#2.0新特性之迭代器, Yield Return

引子:http://www.cnblogs.com/yank/archive/2011/07/02/2096240.html Yield介绍 yield关键字向编译器指示它所在的方法是迭代器块。 在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供一个返回值,例如,在 foreach 语句的每一次循环中返回的值。yield 关键字也可与 break 结合使用...

weixin_30932215的博客 184

西电微原课设——矩阵式键盘数字密码锁设计

内容要求:根据设定好的密码,采用4x4矩阵键盘实现密码的输入功能。当密码输入正确之后,锁就打开(绿灯亮),10秒之后,锁自动关闭(红灯亮);如果连续输入三次密码不正确,就锁定按键5秒钟,同时发出报警(黄灯闪),5秒后,解除按键锁定,恢复密码输入。...

Polaris的博客 1万+

2018安徽省青少年信息学奥林匹克(AHOI)初中组

12 种合法的排列分别为:1, 3, 2, 4, 2, 3, 1, 4, 3, 1, 4, 2, 3, 2, 4, 1, 1, 3, 4, 2, 2, 3,4,1,1,4,2,3, 2,4,1,3, 4,1,3,2, 4,2,3,1, 1,4,3,2, 2,4,3,1。分为 2 组,一组的队员实力值是{4, 5, 2, 3},一组是{-4, -3, -5},其中最小的组人数为 3,可以发现没有比 3 更优的分法了。[0, 1, 1, 2]同样不是合法的分组方案,因为出现了两个实力值为 1 的选手。

weixin_42358969的博客 1143

C#2.0的新特性

**************************************************************        C#2.0的新特性 前一段时间写Resume,写自己熟悉.Net 2.0。然后想到如果别人问C#2.0有些什么新特性,我应该怎

clszd0717的专栏 314

热更新方案 HybridCLR 学习教程 |(一)原理及准备工作

前面文章介绍了热更新相关的知识,包括使用xLua实现热更新实战等 那本文就来介绍一下 热更新方案 HybridCLR(代号wolong,原huatuo)和基本使用方法。 若是想了解更多关于HybridCLR的东西也可以去 官网 详细查阅。

努力前行,总会成为自己心中的那道光 2万+

C#各语言版本特性介绍

C# 2.0泛型(Generics)泛型是CLR 2.0中引入的最重要的新特性,使得可以在类、方法中对使用的类型进行参数化。例如,这里定义了一个泛型类:class MyCollection&lt;T&gt; { T variable1; private void Add(T param){ } } 使用的时候:MyCollection&lt;string&gt; list2 = new MyCol...

MIss-Y的博客 2118

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C#2.0 新特性

C# 2.0新特性,包括泛型、迭代器、可空类型、匿名方法、委托的协变与逆变、静态类等。

高级项目经理、专注于技术架构、分享项目管理及职场心得 614

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C#2.0 新特性概述

前一段时间写Resume,写自己熟悉.Net 2.0。然后想到如果别人问C#2.0有些什么新特性,我应该怎么回答呢?发觉原来除了泛型(Generic)外自己也说不出什么。于是翻书查资料重新整理了思路。重新审视C#2.0的新特性,当作学习3.0的起步吧。 一、泛型(Generic) 概述: 引入泛型绝对是C#2.0的最大的新特性。通过“参数化类型”实现一份代码操作多种数据类...

asq00220的博客 231

C#各版本新特性

目录 C# 2.0 C# 3.0 C# 5.0 C# 6.0 表达式 everywhere out变量 元组和解构 解构方法 Deconstrct 改造Size的构造方法 模式匹配 ref 局部变量和 ref 返回值 数字字面量语法增强 局部函数 支持更多 async 返回类型 C#7.0 1. out-variables(Out变量) 2.Tuples(元...

小布丁的读书笔记 9415

C# 二十年语法变迁之 C# 2,C# 3 ,C# 4参考

C# 二十年语法变迁之 C# 2,C# 3 ,C# 4参考https://benbowen.blog/post/two_decades_of_csharp_i/自从 C# 于 2000 年推出以来,该语言的规模已经大大增加,我不确定任何人是否有可能在任何时候都对每一种语言特性都有深入的了解。因此,我想写一系列快速参考文章,总结自 C# 2.0 以来所有主要的新语言特性。我不会详细介绍它们中的任何一...

dotNET跨平台 216

对C#2.0新特性的理解

 1、 泛型:在我看来,泛型就是通过将数据类型参数化从而实现了代码的更为灵活的复用,泛型的出现使得C#能够使用同一段代码来操作多种数据类型。泛型无疑是C#2.0最重大的改进,它的出现赋予了C#代码更强的类型安全,更好的复用,更高的效率和更清晰的约束。 2、 匿名方法:匿名方法允许我们将代码直接与委托实例相关联,使委托实例化工作更加直观和方便。在我看来,这只是C#又多了一种语法格式而已,不再

gggcorn的专栏 414

C# 2.0 特性

C# 2.0需要支持.NET Framework 2.0的编译器,对于MS来说就是VS 2005,开源社区的SharpDevelop2也是不错的选择,但是Borland最新的C# Builder 2006暂不支持.NET 2.0。在这里列举这些特性的目的就是让各位已经开始使用VS 2005等开发工具的朋友可以在短时间熟悉新语言环境,运用新的语言特性,高效率完成任务。        C# 2.0引入

博客搬往 http://begtostudy.cnblogs.com 1099

C#2.0新特性

1、 泛型   在我看来,泛型就是通过将数据类型参数化从而实现了代码的更为灵活的复用,泛型的出现使得C#能够使用同一段代码来操作多种数据类型。泛型无疑是C#2.0最重大的改进,它的出现赋予了C#代码更强的类型安全,更好的复用,更高的效率和更清晰的约束。 2、 匿名方法   匿名方法允许我们将代码直接与委托实例相关联,使委托实例化工作更加直观和方便。在我看来,这只是C#又多了一种语法格式而已,

jackljf的专栏 642

Effective C#之Item 49:Prepare for C# 2.0

  Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE

一路采撷 1511
上一篇: C# 2.0 泛型
下一篇: C#2.0新特性—匿名方法
junmail
博客等级 码龄22年 159粉丝 452原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值