《C#入门到精通》学习笔记 -- IEnumerable和IEnumberator接口

(Linux)DHCP 超级作用域和中继代理(超难受做了超久) DHCP服务器在192.168.159.0 可以实现分配IP的功能,现在要跨网段分配IP 就需要用到DHCP中继代理。中继代理有两张网卡分别eth0:IP 192.168.159.2 ;eth1: IP:192.168.200.2 。现在要实现192.168.200.0网段的客户机可以获取DHCP服务器的IP。中继代理其实是相当于一个路由器的作用 DHCP服务器的IP地址 :192.168.159... 阅读详情

http://www.cnblogs.com/wxwx110/archive/2007/02/26/657090.html

C# defines two interfaces to enumerate a collective object. Now let us see them:
public interface IEnumerator
{       
    object Current { get; }
    bool MoveNext();
    void Reset();
}
public interface IEnumerable
{
   IEnumerator GetEnumerator();
}
Now the question is: why does need the two interface? Maybe IEnumerator is enough. The Example is below::
class MyData : IEnumerator
{
   private int[] data;
   private int index;
       
   public MyData()
   {
       data = new int[10];
       index = -1;
    }
    public object Current
    {
        get { return data[index]; }
    }
    public bool MoveNext()
    {
        return ++index < data.Length;
    }
    public void  Reset()
    {
        index = -1;
    }
}

Is there any problem with this?
 Yes, there is. If you implement IEnumerator interface, not IEnumerable, there will be subtle problematic in some special cases. Now begin another example with MyData class object: 
IEnumerator e = new MyData();
while (e.MoveNext())
{
  object o = e.Current;
  {
e.MoveNext();
    object o2 = e.Current;
    DoSomethingWith(o,o2);
   }
 }
 Do you see the potential problem above? This is caused by the essence of the IEnumberator interface. This interface force us to use the enumerator in this way:

 Set the original iterative position before the starting (Reset)
 Call MoveNext() function to move the position to the next, and check the current element is existing 
 Get the current element from the Property Current
So , the IEnumberator is often implemented by using some internal state( in our MyData example it is the class instance member index). When you use the IEnumberator variable, you have to use it in the special way illuminated above. But when you use it in a nested way, you maybe destroy the object internal state, and the behavior is undefined. 
 So, the .NET Framework provide another interface IEnumberable, which creates an IEnumerator variable by a function GetEnumberator(), and the internal state is saved in the variable returned. When you use it, you change the variable internal state, not the class instance variable implementing the interface IEnumerable, and the undefined behavior will never happen again. 
 And remember, foreach is for IEnumerable, not for IEnumberator.

别再为调试发愁!STM32CubeMX+FreeRTOS下,串口printf打印的保姆级配置指南(基于STM32F429) 本文详细介绍了在STM32CubeMX和FreeRTOS环境下实现稳定串口printf打印的配置方法。通过硬件选型、基础配置、线程安全的重定向实现以及高级调试技巧,帮助开发者解决多任务环境下的串口输出问题,提升调试效率。特别适用于STM32F429开发板用户。 阅读详情

相关推荐

Claude Code与Codex深度对比:终端AI编程助手选型指南

大语言模型驱动的AI编程助手已成为开发者提效的重要工具,它们基于自然语言交互,自动完成代码生成、重构和调试。这类工具依赖上下文理解与工程实践,不同产品在交互模式、模型接入和任务执行上差异显著。从终端CLI编程场景出发,梳理AI编程助手的设计原理与技术价值,重点对比Anthropic Claude Code与OpenAI Codex在安装配置、上下文管理、第三方模型接入(如DeepSeek)以及高频报错处理上的实际表现。无论你是新手还是资深工程师,理解这些差异有助于根据自身工作流选择合适工具,或在两者间灵活切

weixin_33755649的博客 3179

Arraylist实现原理

<span style="font-family: function() { var id = (this._style >> 24) & 0xff; color: #000000; font-size: medium;">Arraylist实现原理             ArrayList是使用最频繁的一个集合类。其实现原理可以用如下方式来解释:            首先,A

stevenjin的专栏 2269

Oracle11g安装教程、配置实例、监听、客户端程序详解_Windows篇

Oracle11g安装教程、配置实例、监听、客户端程序详解_Windows篇 文章目录Oracle11g安装教程、配置实例、监听、客户端程序详解_Windows篇前言一、数据库的安装前准备,前提是没有安装过!!!二、仅安装数据库软件(数据库运行环境)三、添加数据库实例四、设置监听程序,让数据库可以通过网络访问五、为目标数据库设置网名总结 前言 如果需要安装包:联系我看到会给你链接,因为现在官网已经不提供10g,11g的安装包了,在网盘保存望悉知(回复不会很及时,下班看到会回复敬请谅解)。 提示:以下

zhx__的博客 5630

在Cocoa Touch框架中使用迭代器模式

苹果公司用自己的命名规则“枚举器/枚举”改写了迭代器模式,用于相关基础类的各种方法。从现在开始,我将使用“枚举”一词,它就是苹果版本的“迭代”。在这个模式中它们是一个意思。基础框架中的NSEnumerator类实现了迭代器模式。抽象NSEnumerator类的私有具体子类返回枚举器对象,能够顺序遍历各种集合——数组、集(set)、字典(值与键),把集合中的对象返回给客户端。 NSDirect

好脑瓜不如烂笔头,每天积累一点! 547

锐浪报表 Grid++Report 子报表 Delphi

锐浪报表 Grid++Report 是国内较好的报表控件,本人一直使用它,做出很多特色的报表。可以说你的报表设计出来,它基本上能做出来。 但是它帮助文件上,说的不深,近期因为要做一个有关社工的报表,大表中,嵌套2个子表。可以说,一个表到三个数据集,分别打印。 在认真看了帮助的基础上,网上探索,基本无此类,特别是Delphi的帮助,几乎为零。经二天摸索,做出来了。 一、设计思路 1、大表和二个小表,可以设计为三个表,分别使用三个GridppReport控件,取名...

lyhoo163的专栏 9073

PyTorch实战(2)——使用PyTorch构建神经网络

在本节中,我们使用 PyTorch 在简单数据集上构建了一个神经网络,训练神经网络来映射输入和输出,并通过执行反向传播来更新权重值以最小化损失值,并利用 Sequential 类简化网络构建过程;介绍了获取网络中间值的常用方法,以及如何使用 save、load 方法保存和加载模型,以避免再次训练模型。

盼小辉丶的博客 1万+

Objective-C学习笔记(一)------Foundation Kit快速学习

这个学习笔记基本上就是例子的集合,讲解的还是需要多看看相关的书籍,以下所有代码都是在xcode4.5下编译通过。 一、常用的数据类型 NSRange用来表示相关事物的范围,通常是字符串里的字符范围或者是数组里的元素范围。其定义如下 老版本定义: typedef struct _NSRange{    unsigned int location;    unsigned int leng

海阔凭鱼跃,天高任鸟飞 831

YOLO26涨点改进| TGRS 2026 | 独家创新首发、注意力改进篇| 引入CSSCA频谱-空间交叉注意力,含多种创新改进,小目标检测、图像分割、高光谱图像分类、语义分割任务任务涨点

🔥本文提出CSSCA(频谱-空间交叉注意力)模块,通过中心像素引导的光谱与空间交叉注意力机制,有效提升YOLO26模型的特征表达能力。该模块实现了光谱与空间信息的协同优化,能够自适应强化关键通道与重要空间区域,增强模型对小目标和复杂场景的感知能力。文章详细介绍了CSSCA的网络结构、工作原理及四大优势,包括精准特征表达、协同信息优化、小样本适应性和轻量化设计。同时提供了完整的代码实现和四种改进方案的YAML配置文件,包括基础版、增强版、C3k2融合版和C2PSA融合版,为YOLO26模型的性能提升

Ai缝合怪、助力小伙伴高效发论文 267

.NET基础之迭代器

使用foreach循环是有IEnumerator接口来实现的,IEnumerator即实现了迭代器,在foreach中如何迭代一个集合arrayList呢?   调用arrayLis.GetEnumberator(),返回一个IEnumberator引用。   调用所返回的Enumberator接口的MoveNext()方法。   如果MoveNext()返回true,就使用IEnumber

247

地统计插值学习心得(一)

(创建地统计图层工具用于根据现有的地统计图层或者地统计模型来创建包含新要素数据集的地统计图层,也就是使用构建好的地统计模型用到新的数据集中)这表明,远离极值的区域预测不受极值的影响,并且还表明,包括极值会导致钼元素浓度高的区域周围的预测明显变高。通常,我们使用同一个数据集进行建模和预测,但是在实际插值过程中,这两步的数据可以是不同的,这就是处理极值的诀窍。如果你的数据集有无法忽略的极值时(比如这些钼元素浓度),一种常见的方法是首先显式移除极值进行建模,然后在预测中使用整个数据集(包括极值)。

JData_Engineer的博客 286

项目介绍 MATLAB实现基于LSTM-XGBoost长短期记忆网络(LSTM)结合极端梯度提升(XGBoost)进行多变量时序预测的详细项目实例(含模型描述及部分示例代码)

本项目基于MATLAB平台,实现LSTM-XGBoost混合模型进行多变量时序预测。通过LSTM网络自动提取时序特征,结合XGBoost强大的回归能力,有效解决多变量时序数据的高维复杂性、长短期依赖捕捉等难题。项目包含完整的数据预处理流程、模型构建与训练方法,以及性能评估指标。提供的GUI界面支持参数调整、训练监控和结果可视化,适用于能源、金融、气象等多领域预测任务。配套代码详细注释,便于理解模型实现细节,为时序预测研究提供实用参考框架。

优质创作者: 人工智能技术领域 对于有一定基础的 MATLAB和Python带具体需求都可以详谈 MATLAB和Python可以提供代码调试服务加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢 101

IEnumerable和IEnumerator 详解

初学C#的时候,老是被IEnumerable、IEnumerator、ICollection等这样的接口弄的糊里糊涂,我觉得有必要切底的弄清楚IEnumerable和IEnumerator的本质。 下面我们先看IEnumerable和IEnumerator两个接口的语法定义。其实IEnumerable接口是非常的简单,只包含一个抽象的方法GetEnumerator(),它返回一个可用于循环访问集

中辽普坦的专栏 17万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

转载 IEnumerable和IEnumerator 详解

初学C#的时候,老是被IEnumerable、IEnumerator、ICollection等这样的接口弄的糊里糊涂,我觉得有必要切底的弄清楚IEnumerable和IEnumerator的本质。 下面我们先看IEnumerable和IEnumerator两个接口的语法定义。其实IEnumerable接口是非常的简单,只包含一个抽象的方法GetEnumerator(),它返回一个可用于循环访问集...

weixin_34372728的博客 198

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

实现IEnumberable接口和IEnumberator

class BookEnum : IEnumerator //实现foreach语句内部,并派生 { public Book[] _book; //实现数组 int position = -1;//设置“指针” public BookEnum(Book[] list) { ...

weixin_30633507的博客 223

详谈 IEnumerator 和 IEnumberator

 IEnumerable   只是表明某个对象能够被枚举,真正的工作是由IEnumerator的Current,   MoveNext,   and   Reset完成的,为什么要有2个不同的接口来作枚举呢?主要是考虑到被枚举的对象会有多个独立的客户端调用IntroductionThis article discusses the IEnumerator and IEnumerablein

camel0564的专栏 2739

foreach和IEnumerable+yield和IEnumerator

C#里,foreach可以算是个高一等级的循环,因为想要使用foreach必须实现IEnumberable,然后还需要在这个接口的唯一方法中,用yield return返回元素,才能达到f...

dotNET跨平台 250

IEnumerable和IEnumerator的区别

本来想自己研究一下IEnumerable和IEnumerator这两者的区别。但是在博客园中发现已经有了这样的文章,而且写的很好,很易懂。 于是就直接引用其中两篇如下,作为以后参考: http://www.cnblogs.com/bear831204/archive/2009/01/05/1369547.html http://www.cnblogs.c...

weixin_33704234的博客 91

对于 飞林沙的<把Array说透>的扩展

    今天看到 飞林沙同学的两个帖子     把Array说透和把Array说透序一这两个帖子都是从很底层的原理以及来说Array数组,看了让人很受启发,所以我想写一篇从FCL的角度来阐述数组的文章,权当抛砖引玉,高手请飘走....         System.Array         地球人都知道,所有的数组都是隐式的派生于这个基类。在MSDN里可以发现System.Array的原型是: ...

weixin_33676492的博客 169

C# yield关键字解析

在实现集合类型IEnumberable 和IEnumberator时,我们一般都要new一个List,或者是其他实现了 这个接口的类型。每次都要自己定制,这样会很麻烦,微软为了为我们定制好了一个通用的类,就是 yield关键字这个语法糖。 yield实现了一个实现IEnumberable&lt;T&gt;接口的类来返回我们需要的IEnumberable&lt;T&gt;类型的数据。 yi...

weixin_40719943的博客 318

Foreach能够循环的本质

我们对foreach循环并不陌生,在C#中我们用得非常多,但是我们是否清楚foreach循环的本质呢? 众所周知,foreach循环能够遍历 数组 ,集合 。但是我们自己定义的一个类是否能够通过foreach循环遍历出来呢? Foreach能够遍历的数据类型都是实现了 IEnumerable 接口的 意思就是说 只要我自定义的类实现了 IEnumberable接口 我都能够通过fore...

weixin_30340775的博客 183

.Net 2.0 新功能:迭代器(Iterators)

什么是迭代器?迭代器是方法、get访问器或运算符,它能使您能够在类或者结构中支持foreach迭代,而不必实现整个IEnumerable接口。例子:public class YieldTest...{   public static IEnumertable Power(int number ,int exponent)...{   int counter=0;   int res

董浩的专栏 2960
上一篇: 《C#入门到精通》学习笔记 -- 逆变接口与协变接口
下一篇: WebService的开发、发布及调用
令羽飞飞
博客等级 码龄14年 42粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值