zoukankan      html  css  js  c++  java
  • 迭代集合的不同方式(yield return)

    在下面这个比HelloWord略大但比较真实的示例中,可以使用yield return语句,以不同方式迭代集合的类。类BookTitles可以默认方式通过GetEnumerator()方法迭代标题,用Reverse()方法逆序迭代标题,用Subset()方法迭代子集。

        public class BookTitles {
                string[ ] names = {"A","B","C","D"};
                /// <summary>
                /// 迭代标题
                /// </summary>
                /// <returns></returns>
                public IEnumerator<string> GetEnumerator ( ) {
                    for ( int i = 0; i < 4; i++ ) {
                        yield return names[i];
                    }
                }
                /// <summary>
                /// 逆序迭代标题
                /// </summary>
                /// <returns></returns>
                public IEnumerable<string> Reverse ( ) {
                    for ( int i =3; i >= 0; i-- ) {
                        yield return names[i];
                    }
                }
                /// <summary>
                /// 迭代子集
                /// </summary>
                /// <param name="index"></param>
                /// <param name="length"></param>
                /// <returns></returns>
                public IEnumerable<string> Subset ( int index, int length ) {
                    for ( int i = index ; i < index +length ; i++ ) {
                        yield return names[i];
                    }
                }
            }

    注:类支持的默认迭代是定义为返回IEnumerator的GetEnumerator()方法,命名的迭代返回IEnumerable。

    迭代字符串数组的客户端代码先使用GetEnumerator()方法,该方法不必在代码中编写,因为这是默认使用的方法。然后逆序迭代标题,最后将索引和要迭代的项数传给Subset()方法,来迭代子集。

               var titles = new BookTitles ( );
                foreach ( var item in titles  ) {
                    Console.Write ( item+"   " );
                }
    
                Console.WriteLine ( "\n Reverse");
                foreach ( var item in titles.Reverse() ) {
                    Console.Write ( item+"   "  );
                }
                Console.WriteLine ("\n Subset" );
                foreach ( var item in titles.Subset(2,2)  ) {
                    Console.Write(item +"   " );
                }
                Console.ReadKey ( );
  • 相关阅读:
    windows系统历年高危漏洞
    安全产品分类
    防火墙
    UTM(统一威胁管理)
    ORA-39127: 调用 "WMSYS"."LT_EXPORT_PKG"."SCHEMA_INFO_EXP" 时发生意外错误
    oracle如何查看当前有哪些用户连接到数据库
    LINUX修改主机名
    删除Oracle用户及表空间
    Oracle AWR报告详细分析--比较详细
    RMAN优缺点及RMAN备份及恢复步骤
  • 原文地址:https://www.cnblogs.com/xiaoyu5062/p/2580549.html
Copyright © 2011-2022 走看看