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

  • 相关阅读:
    Django之Orm的各种操作
    python面试题---收藏的笔记
    jQuery中$.each()方法的使用
    Django 之 路由URL,视图,模板
    高级FTP服务器开发
    选课系统
    ATM
    开发一个简单的python计算器
    学习PYTHON之路, DAY 8
    学习PYTHON之路, DAY 7
  • 原文地址:https://www.cnblogs.com/xtxtx/p/9207205.html
Copyright © 2011-2022 走看看