zoukankan      html  css  js  c++  java
  • NET基础课--Linq第二讲

      这一讲,来说说集合。因为linq主要用于对数据源进行查询,集合是最常见的数据源。

        集合

          形式: 数组,列表List<T> Arraylist等。

          特点: 可通过索引或键访问。可进行foreach循环。可通过属性获取成员数量。包含添加和移除成员的方法。

         迭代器

      ·  (1)使用

          我们每次针对集合类型编写foreach代码块,都是在使用迭代器

          这些集合类型都实现了IEnumerable接口,都有一个GetEnumerator方法

          但对于数组类型就不是这样,编译器把针对数组类型的foreach代码块替换成了for代码块。

          来看看List的类型签名:    

          public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable

          IEnumerable接口,只定义了一个方法就是:    

          IEnumerator<T> GetEnumerator();

        (2)迭代器的优点:

          假设我们需要遍历一个庞大的集合只要集合中的某一个元素满足条件

          就完成了任务,你认为需要把这个庞大的集合全部加载到内存中来吗?当然不用(C#3.0之后就不用了)!   

    复制代码
            static IEnumerable<int> GetIterator()
            {
                Console.WriteLine("迭代器返回了1");
                yield return 1;
                Console.WriteLine("迭代器返回了2");
                yield return 2;
                Console.WriteLine("迭代器返回了3");
                yield return 3;
            }
    复制代码

          消费这个函数的代码如下:      

                foreach (var i in GetIterator())
                {
                    if (i == 2)
                    {
                        break;
                    }
                    Console.WriteLine(i);
                }
                Console.ReadKey();

          输出结果为:      

          迭代器返回了1
          1
          迭代器返回了2

          可以看到:当迭代器返回2之后,foreach就退出了并没有输出“迭代器返回了3”也就是说下面的工作没有做。

        (3)yield 关键字

          MSDN中的解释如下:

          在迭代器块中用于向枚举数对象提供值或发出迭代结束信号。

          也就是说,我们可以在生成迭代器的时候,来确定什么时候终结迭代逻辑      

         (4)注意事项

          IEnumerable接口是LINQ特性的核心接口,只有实现了IEnumerable接口的集合,才能执行相关的LINQ操作,比如select,where等

  • 相关阅读:
    LeetCode
    LeetCode
    一篇真正教会你开发移动端页面的文章(一)
    移动端页面开发资源总结
    Vue 模板
    使用 concurrently 并行地运行多个命令(同时跑前端和后端的服务)
    值得H5前端学习的60个JS插件(含DEMO演示)
    解读浮动闭合最佳方案:clearfix
    JavaScript 如何工作的: 事件循环和异步编程的崛起 + 5 个关于如何使用 async/await 编写更好的技巧
    JavaScript 运行机制详解:再谈Event Loop
  • 原文地址:https://www.cnblogs.com/tiantianle/p/4908265.html
Copyright © 2011-2022 走看看