zoukankan      html  css  js  c++  java
  • C# 特性之迭代器

    研究下C#各版本特性。

    C# 2.0特性:迭代器 (顺带熟悉一波yield的用法)

            #region 特性测试 -- 迭代器
            private void button8_Click(object sender, EventArgs e)
            {
                IEnumerator enumrator = GetEnumerator(); //不会执行命令
                var value = string.Empty;
                while (enumrator.MoveNext())  //首次调用【yield return -1】 之后进入【for】循环
                {
                    value += enumrator.Current ?? enumrator.Current.ToString();
                    value += "^";
    
                    if (value.Length > 10) break;
                }
                MessageBox.Show(value);
            }
    
            public System.Collections.IEnumerator GetEnumerator()
            {
                yield return -1;
                for (int i = 1; i < 100; i++)
                {
                    yield return i;
                }
            }
            #endregion

    代码调试说明:
       调用GetEnumerator()命令后,不会执行命令
        当调用【MoveNext】后,首次调用【yeild return -1;】,之后会进入for循环获取数据,
        当while循环中【break】后,【For】循环不会再往下执行,【GetEnumrator】方法结束

    说明下:yield return 和 yield break的区别

                   迭代器中使用yield return来返回值,用yield break来结束迭代器。

                   若将上述代码 【yield return i;】 更换为【yield break;】那么,MoveNext  第一次返回 -1后,第二次就会直接结束方法GetEnumrator

                   

                   yield break 和 return区别

                   迭代器中的yield break想当于普通方法中使用的return,直接终止方法(不仅仅只是终止循环,是终止整个方法),而不执行yield break后面的语句。

                   但是yield break和return的区别是,yield break返回一个不为null,但是count为0的IEnumerable集合,但是return 只能返回return null,return null会造成使用者在使用该返回值时抛出空引用异常。实验发现,在迭代器中应用return null,直接编译不通过

                   yield break和break的区别是: 

                   yield break是跳出所有循环,直接终止方法,而break是只跳出一层循环,后面的方法仍要执行。

  • 相关阅读:
    Hbase 命令小结
    shell while内获取外部变量内容
    Idea的live template参数中的预定义功能
    Adobe Illustrator里使用fontawesome矢量图标
    五笔结构与识别码
    致第一次安装RIME的你
    sublime Text Pastry使用
    PHOTOSHOP CC 2015插件安装方法
    搭建自己的OpenWrt开发环境
    【OpenWRT】 Chaos Calmer 15.05 编译
  • 原文地址:https://www.cnblogs.com/aisa-thanatos/p/10983517.html
Copyright © 2011-2022 走看看