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

  • 相关阅读:
    小程序页面跳转 之 js页面函数绑定跳转
    win10系统激活提示无法连接到你组织的激活服务器如何解决
    小程序请求后端接口实例
    cors解决跨域问题
    aes加密 工具类
    后端解决跨域的问题
    理解传输层中UDP协议首部校验和以及校验和计算方法的Java实现
    常见面试题之操作系统中的LRU缓存机制实现
    Java算法之根据二叉树不同遍历结果重建二叉树
    基于Java的二叉树层序遍历打印实现
  • 原文地址:https://www.cnblogs.com/aisa-thanatos/p/10983517.html
Copyright © 2020-2023  润新知