当前位置: 首页 > news >正文

官方网站建设的方法有哪些方面网络优化培训要多少钱

官方网站建设的方法有哪些方面,网络优化培训要多少钱,网站建设丶金手指花总14,网站的源码概要 Take方法作为IEnumerable的扩展方法#xff0c;具体对应两个重载方法。本文主要分析第一个接收整数参数的重载方法。 源码解析 Take方法的基本定义 public static System.Collections.Generic.IEnumerable Take (this System.Collections.Generic.IEnumerable source…概要 Take方法作为IEnumerable的扩展方法具体对应两个重载方法。本文主要分析第一个接收整数参数的重载方法。 源码解析 Take方法的基本定义 public static System.Collections.Generic.IEnumerable Take (this System.Collections.Generic.IEnumerable source, int count); 基本功能是从序列source中返回指定个数count的相邻元素。 源码分析 Take.cs public static IEnumerableTSource TakeTSource(this IEnumerableTSource source, int count) {if (source null){ThrowHelper.ThrowArgumentNullException(ExceptionArgument.source);}return count 0 ?EmptyTSource() :TakeIteratorTSource(source, count); }Take方法本身代码很简单 首先作了一个空序列的检查如果序列为空则抛出异常。然后如果count是0即取前0项相邻元素等价于什么也不作直接返回否则调用TakeIterator方法。 Take.SizeOpt.cs private static IEnumerableTSource TakeIteratorTSource(IEnumerableTSource source, int count) {Debug.Assert(count 0);foreach (TSource element in source){yield return element;if (--count 0) break;} }TakeIterator方法并没有像我们之前分析的WhereSelect等方法那样根据功能定于很多Iterator的派生类来实现具体的功能而是使用了yield return的方式。 按照count的个数取出对应的元素以yield return的方式返回。 下面我们使用相同的代码定义我们自己的扩展方法take 和takeIterator通过log来搞清楚yield return方式的实现细节。 public static IEnumerableTSource takeTSource(this IEnumerableTSource source, int count) {Console.WriteLine(take is called !);if (source null){ ThrowHelper.ThrowArgumentNullException(ExceptionArgument.source);}return count 0 ?EmptyTSource() :takeIteratorTSource(source, count); }private static IEnumerableTSource takeIteratorTSource(IEnumerableTSource source, int count) {Console.WriteLine(TakeIterator is called !);Debug.Assert(count 0);foreach (TSource element in source){Console.WriteLine(Enter takeIterator Foreach);yield return element;Console.WriteLine(Return element from takeIterator Foreach);if (--count 0) break;} }Case 1 不通过toList或foreach循环来调用take的返回值。 static void Main(string[] args){var list Enumerable.Range(1,10).take(2);}执行结果如下 我们可以看到takeIterator并未被调用。 Case 2: 通过foreach循环来调用take的返回值 static void Main(string[] args){var list Enumerable.Range(1,10).take(2);foreach (var item in list){Console.WriteLine(Enter foreach Main functions foreach);Console.WriteLine(Print item in Main function);}}执行结果如下 从执行结果可以看出 takeIterator函数只执行一次但是会生成一个状态机用于返回take出来的所有数据Main函数中的foreach每次的取值是从状态机中获取数据即通过yield return的方式获取。 结论 通过定义具体迭代器实现的延迟加载和通过yield return方式实现的延迟加载本质上没有区别。 但是实现上略有不同定义迭代器方式实现的Where或Select等方法如果没有取值操作它只是将迭代器对象返回迭代器对象中保存了迭代方式和源数据序列对应的方法会被调用。通过yield return方式实现的迭代器如果没有取值操作yield return所在的方法不会被调用。
http://www.hkea.cn/news/14444746/

相关文章:

  • 余干网站建设制作紫金公司网站制作
  • 建设银行国际互联网网站是什么东平做网站
  • 超市网站开发建设建议企业网络推广外包
  • 互联网营销主要学什么西安优化网站技术
  • 电商网站建设规划开发方案wordpress收款生成源码
  • 大气科技类企业公司网站源码嘉定网站制作
  • 支付网站开发怎么做账深圳做网站最好的公司
  • 网站后台的目录在哪做网站是58好还是百度好
  • 做羞羞事免费网站建设门户网站的基本意义有哪些
  • 后台网站怎么做视频沧县做网站价格
  • 哈尔滨优化网站方法域名注册商排名
  • 北京互联网公司网站建设网站域名需icp备案
  • 中国网站建设公司图片织梦网站后台默认登陆路径
  • 这样做微信网站三星网上商城如何学生认证
  • 网站怎么做点击广告网站建设租用服务器
  • 网站关键词优化遇到的情况和解决方法商务网站可以做哪些
  • 做淘宝店头的网站南昌网站建设价位
  • 东坑网站建设可以做水印的网站
  • 上海专业网站建站公嘉兴seo排名扣费
  • 南京做网站最好的公司重庆专业网站推广时间
  • 塘厦做网站青岛网站建设康之迅
  • 做网站排名要多少钱关于建筑工程的网站
  • 学做视频的网站有哪些同一个网站买多家cdn
  • 网站检测报告哪里做中高端网站设计
  • 优秀企业门户网站建设新手建站教程报价单
  • 网站收录一键提交福建省住房和城乡建设网站
  • 网站建设图片上传常州做网站哪里好
  • 布吉网站建设公司宁夏自治区住房城乡建设厅网站
  • 注册域名不建设网站网页设计代写价格
  • 网站建设 目标浏阳做网站公司