zoukankan      html  css  js  c++  java
  • 学习笔记: 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;
                 }
             }
         }
    }

  • 相关阅读:
    matlab程序性能优化与混合编程技术介绍
    最大熵原理/最大熵原则/最大熵模型(the maximum entropy principle,MEP)
    马氏距离 Mahalanobis Distance
    时间序列分析
    Windows XP + Apache 2.2.4 + PHP 5.2.0 + MySQL 5.0.27 + Zend Optimizer 3.2.0环境配置方法
    栈应用——表达式求值
    Android实现模拟时钟(简单+漂亮)时针、分针、秒针
    基于循环链表的约瑟夫问题
    assert()详解
    Hadoop HPROF 的使用
  • 原文地址:https://www.cnblogs.com/xtxtx/p/9207205.html
Copyright © 2011-2022 走看看