zoukankan      html  css  js  c++  java
  • 迭代器的使用方法

    以前一直不明白迭代器的使用,今天仔细看了一下某位大牛的博客文章,算是大概明白了,一个简单的例子如下:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace 迭代器测试
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
    
                item = Rtest();   //完成初始化
                itemevery = item.GetEnumerator();
    
            }
    
            IEnumerable <string> item;  //迭代器
            IEnumerator <string > itemevery;  //遍历使用
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (itemevery.MoveNext() == false)  //需要先move一次,才能获得第一个值
                {
                    MessageBox.Show("遍历完了");
                }
                else
                    button1.Text = itemevery.Current;  //有效时才能获得值
            }
    
            public IEnumerable<string> Rtest()  //第一次返回a ,第二次返回b
            {
                MessageBox .Show("----我TestStateChange是第一行代码");
                MessageBox.Show("----我是第一个yield return前的代码");
                yield return "a";  //会执行以上代码
    
                MessageBox.Show("----我是第一个yield return后的代码");
    
                MessageBox.Show("----我是第二个yield return前的代码");
                yield return "b"; //会执行以上代码
    
    
                //以下代码依然会得到执行,但是MoveNext返回false   
                MessageBox.Show("----我是第二个yield return前的代码");
            }
        }
    }

    如果希望持续循环的获得数据,那么你可能会尝试itemevery.Reset();但是其实会报错的,原理可能比较复杂,没有真正实现Reset()方法

    你可以用重新获得状态来实现:

                if (itemevery.MoveNext() == false)
                {
                    //MessageBox.Show("遍历完了");
                    itemevery = item.GetEnumerator();  //获得新的
                }
                else
                    button1.Text = itemevery.Current;

    这样就可以无限循环下去了!

  • 相关阅读:
    服务命令Linux安装配置apache
    枚举参考hdu2062Subset sequence
    异常选择struts2文件上传产生Source 'xxxx.tmp' does not exist
    序列插入常用排序算法 总结
    代码nullMerge two sorted linked lists
    下载文件win8mp3下载
    希望判断创造、改变世界的基因
    qemulauncher:图形化的QEMU启动器
    Virtual Memory I: the problem
    HIGHMEM
  • 原文地址:https://www.cnblogs.com/flyant/p/4453218.html
Copyright © 2011-2022 走看看