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;

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

  • 相关阅读:
    OO开发
    重构:Extract Method (提炼函数)
    Vue 一个组件引用另一个组件
    闭包
    视差滚动原理与实现
    JS中的constructor 和 prototype
    jQuery 为动态添加的元素绑定事件
    setTimeout 的理解
    关于Vertical Align的理解
    网页特效:滚动视差设计指南
  • 原文地址:https://www.cnblogs.com/flyant/p/4453218.html
Copyright © 2011-2022 走看看