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;
                 }
             }
         }
    }

  • 相关阅读:
    Android Studio 通过 git update 或者 pull 的时候出错及解决办法
    powershell2
    @SuppressWarnings注解用法
    IDEA设置虚拟机参数
    Java爬虫https网页内容报错SSLHandshakeException信任(忽略)所有SSL证书
    Quartz时间配置(周期任务)
    java 字符串转成 json 数组并且遍历
    linux 不能进入系统 Failed to load SELinux policy. Freezing
    linux安装mysql后报错启动不了Starting MySQL. ERROR! The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid).
    警告:MySQL-server-5.6.26-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
  • 原文地址:https://www.cnblogs.com/xtxtx/p/9207205.html
Copyright © 2011-2022 走看看