首页 > 编程语言 >C# 迭代器

C# 迭代器

时间:2023-05-13 15:00:10浏览次数:30  
标签:string 迭代 C# TargetStr position IEnumerator public

c# 的迭代器模式是通过 IEnumerator 和 IEnumerable 接口来实现的

c# 实现迭代器示例

public class CharList : IEnumerable
    {
        public string TargetStr { get; set; }
        public CharList(string str)
        {
            this.TargetStr = str;
        }

        /// <summary>
        /// 获取迭代器
        /// </summary>
        /// <returns></returns>
        public IEnumerator GetEnumerator()
        {
            return new CharIterator(this.TargetStr);
        }
    }

    /// <summary>
    /// 实现IEnumerator接口
    /// </summary>
    public class CharIterator : IEnumerator
    {
        //引用要遍历的字符串
        public string TargetStr { get; set; }

        //指出当前遍历的位置
        public int position { get; set; }

        public CharIterator(string targetStr)
        {
            this.TargetStr = targetStr;
            this.position = this.TargetStr.Length;
        }

        public object Current
        {
            get
            {
                if (this.position == -1 || this.position == this.TargetStr.Length)
                {
                    throw new InvalidOperationException();
                }
                return this.TargetStr[this.position];
            }
        }

        public bool MoveNext()
        {
            //如果满足继续遍历的条件,设置position的值
            if (this.position != -1)
            {
                this.position--;
            }
            return this.position > -1;
        }

        public void Reset()
        {
            this.position = this.TargetStr.Length;
        }
    }

语法糖模式:

 public class StringList : IEnumerable
    {
        public string[] Count = new string[] { "1", "2", "3" };

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

调用:

var arr = new StringList();
foreach (string item in arr)
{
   Console.Write(item);
}

 

标签:string,迭代,C#,TargetStr,position,IEnumerator,public
From: https://www.cnblogs.com/ZGXF/p/17397409.html

相关文章

  • 欧姆龙CP1H+CIF11与3台台达MS300变频器通讯实战程序 功
    欧姆龙CP1H+CIF11与3台台达MS300变频器通讯实战程序功能:原创程序,可直接用于现场程序。欧姆龙CP1H的CIF11通讯板,实现对3台台达MS300变频器设定频率,读取实际频率,输出电压。反应灵敏,通讯稳定可靠。后续可根据需要扩展台数时,非常灵活方便。器件:欧姆龙CP1H,CP1WCIF11串......
  • 西门子200smart与3台欧姆龙e5cc温控器和3台台达MS300变频器通讯程序
    西门子200smart与3台欧姆龙e5cc温控器和3台台达MS300变频器通讯程序器件:西门子s7200smartPLC,扩展模块SBCM01,3台台达MS300变频器,3台欧姆龙E5cc温控器,昆仑通态触摸屏(带以太网),中途可以加路由器控制方式:触摸屏与plc以太网通讯,PLC本体com口与变频器通讯485口相连,扩展模块SBCM01......
  • 创建SpringCloud项目
    SpringCloud简介SpringCloud是目前国内使用最广泛的微服务框架。SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验。SpringCloud常用组件1.服务注册发现:Eureka,Nacos,Consul2.服务远程调用:OpenFeign,Dubbo3.服务链路......
  • ExtCreateRegion - 区域变换
    相似函数:SetWorldTransform本例效果图:代码文件:unitUnit1;interfaceuses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms, Dialogs,StdCtrls,ExtCtrls;type TForm1=class(TForm)  RadioGroup1:TRadioGroup;  pro......
  • 台达ES系列PLC与施耐德ATV 71变频器通讯程序 程序有
    台达ES系列PLC与施耐德ATV71变频器通讯程序程序有注释。并附送程序,有接线方式,设置。同时自动走完变频器DRIVECOM流程,解决施耐德ATV变频器断电重启后,自准备工作,程序稳定可靠。器件:台达DVPES系列PLC,施耐德ATV71系列变频器,昆仑通态,威纶通触摸屏程序功能:实现频率设定,启停控制,实......
  • 欧姆龙CP1H+CIF11与3台施耐德ATV 71变频器通讯实战程序 功能:原
    欧姆龙CP1H+CIF11与3台施耐德ATV71变频器通讯实战程序功能:原创程序,可直接用于现场程序。欧姆龙CP1H的CIF11通讯板,实现对3台施耐德ATV71变频器设定频率,读取实际频率,变频器状态功能。反应灵敏,通讯稳定可靠。后续可根据需要扩展台数时,非常灵活方便。器件:欧姆龙CP1H......
  • 台达es系列PLC与3台施耐德ATV 71变频器通讯程序
    台达es系列PLC与3台施耐德ATV71变频器通讯程序程序有注释。并附送程序,有接线方式,设置。同时自动走完变频器DRIVECOM流程,解决施耐德ATV变频器断电重启后,自准备工作,程序稳定可靠。器件:台达DVPES系列PLC,3台施耐德ATV71系列变频器,昆仑通态功能:实现频率设定,启停控制,实际频率读取......
  • Vulnhub之election靶机详细测试过程
    Election作者:jasonhuawen靶机信息名称:eLection:1URL:https://www.vulnhub.com/entry/election-1,503/识别IP地址─(kali㉿kali)-[~/Vulnhub/Election]└─$sudonetdiscover-ieth1-r192.168.56.0/24urrentlyscanning:192.168.56.0/24|ScreenView:U......
  • 台达DVP ES系列plc与3台台达MS300变频器通讯程序 器件:台达D
    台达DVPES系列plc与3台台达MS300变频器通讯程序器件:台达DVPES系列的PLC,3台台达MS300系列变频器,昆仑通态功能:实现频率设定,启停控制,实际频率读取等。资料:带注释PLC程序,触摸屏程序,通讯设置说明,接线说明,变频器手册ID:5850669982039532......
  • PACS影像获取、三维影像处理
    PACS部分主要提供医学影像获取、影像信息网络传递、大容量数据存储、影像显示和处理、影像打印等功能。RIS主要提供分诊登记、叫号、检查报告生成和打印等功能。本套影像存储与传输系统将二者进行无缝对接,提供了一个完整的集患者登记、图像采集、图像存储、报告产生的影像检查诊疗......