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是只跳出一层循环,后面的方法仍要执行。

  • 相关阅读:
    语言及其文法
    编译原理绪论
    数据库系统绪论
    Flask系列-模板
    进程调度
    Flask系列-程序基本结构
    针对博客园上传md文件有点麻烦的解决方案
    博客样式存档二 (目前样式)
    [省选联考 2020 A 卷] 组合数问题
    退役划水(2)
  • 原文地址:https://www.cnblogs.com/aisa-thanatos/p/10983517.html
Copyright © 2011-2022 走看看