• 学习笔记: yield迭代器


    yield 与 IEnumerable<T> 结对出现, 可实现按需获取 , 迭代器模式

    static void Main(string[] args)
             {
                 try
                 {
                     {
                         //Console.WriteLine("***************Collection**************");
                         CollectionDemo.Show();
                     }
                     {
                         Console.WriteLine("*******************Yield********************");
                         YieldDemo yieldDemo = new YieldDemo();
                         foreach (var item in yieldDemo.Power())
                         {
                             Console.WriteLine(item);//按需获取,要一个拿一个
                             if (item > 100)
                                 break;
                         }
                         Console.WriteLine("*******************************************");
                         foreach (var item in yieldDemo.Common())
                         {
                             Console.WriteLine(yieldDemo.Common().Count());//先全部获取,然后一起返还
                             if (item > 100)
                                 break;
                         }
                     }

    {
         List<string> fruits =
         new List<string> { "apple", "passionfruit", "banana", "mango",
             "orange", "blueberry", "grape", "strawberry" };

        IEnumerable<string> query = fruits.Where(fruit => fruit.Length < 6);
         foreach (var item in query)//遍历才会去查询比较   迭代器 yield
         {

        }

        IQueryable<string> queryable = fruits.AsQueryable<string>().Where(s => s.Length <6);
         foreach (var item in queryable)//表达式目录树的解析,延迟到遍历的时候才去执行  EF的延迟查询
         {

        }
    }
                 }
                 catch (Exception ex)
                 {
                     Console.WriteLine(ex.Message);
                 }
                 Console.Read();
             }

    public class YieldDemo
    {
         public IEnumerable<int> Power()
         {
             for (int i = 0; i < 10; i++)
             {
                 yield return this.Get(i);
                 //yield return this.Get(i);

                //Console.WriteLine("这里再来一次");

                //yield return this.Get(i) + 1;
             }
         }

        public IEnumerable<int> Common()
         {
             List<int> intList = new List<int>();
             for (int i = 0; i < 10; i++)
             {
                 intList.Add(this.Get(i));
             }
             return intList;
         }

        private int Get(int num)
         {
             Thread.Sleep(2000);
             return num * DateTime.Now.Second;
         }


    }

    public static class ExtendMethod
    {
         public static IEnumerable<T> ElevenWhere<T>(this IEnumerable<T> source, Func<T, bool> func)
         {
             if (source == null)
             {
                 throw new Exception("source is null");
             }
             if (func == null)
             {
                 throw new Exception("func is null");
             }
             foreach (var item in source)
             {
                 if (func.Invoke(item))
                 {
                     yield return item;
                 }
             }
         }
    }

  • 相关阅读:
    android animation
    android手机屏幕分辨率 及 sp dip(dp) px 区别 及高中低分辨率时处理
    android ExpandableListView
    android ImageView 之 android:scaleTye=" "
    android popupwindow
    如何使用 TransactSQL 编写作业脚本(企业管理器)
    线程访问临界区的问题 实例,需解决
    企业信息化
    使用Installshield制作asp,asp.net应用的安装程序
    Linux 系统目录结构
  • 原文地址:https://www.cnblogs.com/xtxtx/p/9207205.html
Copyright © 2020-2023  润新知