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

wordpress简约下载站模板下载clouder认证考试网站建设

wordpress简约下载站模板下载,clouder认证考试网站建设,wordpress资源消耗,南宁站建好就够用概要 本文主要分析Linq中Take带Range参数的重载方法的源码。对于其中的一些关于Range或序列的新概念#xff0c;不再赘述#xff0c;请参看C# Linq源码分析之Take #xff08;一#xff09; 源码分析 基于Range参数的Take重载方法#xff0c;主要分成两部分实现#x…概要 本文主要分析Linq中Take带Range参数的重载方法的源码。对于其中的一些关于Range或序列的新概念不再赘述请参看C# Linq源码分析之Take 一 源码分析 基于Range参数的Take重载方法主要分成两部分实现一部分是Range中的开始和结束索引都是正数的情况例如取第一个到第三个元素的情况另一部分是开始或结束索引中有倒数的情况例如取倒数第三个到倒数第一个的情况。 本文着重分析Range中的正数情况。 public static IEnumerableTSource TakeTSource(this IEnumerableTSource source, Range range) {if (source null){ ThrowHelper.ThrowArgumentNullException(ExceptionArgument.source);}Index start range.Start;Index end range.End;bool isStartIndexFromEnd start.IsFromEnd;bool isEndIndexFromEnd end.IsFromEnd;int startIndex start.Value;int endIndex end.Value;Debug.Assert(startIndex 0);Debug.Assert(endIndex 0);if (isStartIndexFromEnd){if (startIndex 0 || (isEndIndexFromEnd endIndex startIndex)){return EmptyTSource();}}else if (!isEndIndexFromEnd){return startIndex endIndex? EmptyTSource(): TakeRangeIterator(source, startIndex, endIndex);}return TakeRangeFromEndIterator(source, isStartIndexFromEnd, startIndex, isEndIndexFromEnd, endIndex); } 检查源序列是否为空如果为空直接抛出异常获取Range的启始和结束的索引值以及索引值是正数还是倒数的bool值如果开始索引值是倒数以下几种情况返回空序列 a开始索引是^0 倒数第0个显然不合理 bRange形如 ^1… ^3的情况假设有10个元素 ^1… ^3相当于取从第10个到第7个显然是不合理。应该是从第7个到第10个 cRange形如 ^2 … ^2因为开始和结束索引相同中间没有间隔元素该种情况也不合理在Range中的开始和结束索引都不是倒数的情况下如果开始索引大于结束索引即Range形如2…1返回空序列否则调用TakeRangeIterator方法完成具体取值操作对于合理的Range倒数情况例如形如 ^3… ^1 3… ^1 或 ^3 … 10 这些情况执行最后的TakeRangeFromEndIterator方法。 TakeRangeIterator方法 TakeRangeIterator方法用于处理Range中的开始和结束索引都是正数的情况。该方法位于Take.SizeOpt文件中。通过yield return/break的方式管理迭代过程。 private static IEnumerableTSource TakeRangeIteratorTSource(IEnumerableTSource source, int startIndex, int endIndex) {Debug.Assert(source ! null);Debug.Assert(startIndex 0 startIndex endIndex);using IEnumeratorTSource e source.GetEnumerator();int index 0;while (index startIndex e.MoveNext()){index;}if (index startIndex){yield break;}while (index endIndex e.MoveNext()){yield return e.Current;index;} }创建迭代器e采用using方式在函数执行完成后自动释放内存空间如果Range中的索引数据和source序列中的元素个数不匹配例如指定从第三个元素开始取但是数列里面只有两个元素返回yield break关闭状态机注意此种情况并不会抛出越界异常按照索引范围通过迭代器e取值创建状态机通过yield return方式返回。 TakeRangeFromEndIterator方法 TakeRangeIterator方法用于处理Range中的开始和结束索引存在倒数的情况。该方法位于Take.cs文件中。通过yield return/break的方式管理迭代过程。 该方法篇幅较长将在C# Linq源码分析之Take 三中详细分析其源码。
http://www.dnsts.com.cn/news/204091.html

相关文章:

  • 翔安区建设网站网络营销品牌策划
  • psd素材免费下载网站大连网站建设公司排名
  • 做网站首页的图片素材什么公司网站建设比较好
  • 上海有多少个网站科技公司广州免费自助建站平台
  • 网站做产品的审核如何选择购物网站建设
  • 一家专做二手手机的网站叫什么手机网站关键词推广
  • 网站建设歺金手指排名13wordpress手机域名
  • 营销型网站建设课程培训现场如何制作百度网页
  • 阿里云的wordpress站点地址写错百度推广需要多少钱
  • 百度权重查询爱站网wordpress新浪
  • 昆明网站服务器给网站加个地图的代码
  • 莆田网站建设莆田怎么用ftp备份网站
  • 网站做营销推广宁波网站模板哪家性价比高
  • 企业网站php开源系统wordpress 管理权限管理
  • 如何查询网站被百度收录厦门seo优化推广
  • 锦州做网站公司哪家好360安全浏览器
  • 自己做的网站怎么放视频外贸网站开发哪家好
  • 萍乡的电子商务网站建设公司怎么推广引流
  • 地方网站怎么做手机网站建设步骤
  • WordPress适合做多大级别的网站网站建设管理措施
  • 固定ip做网站杭州做网站公司排名
  • 小户型室内装修设计公司网站企业关键词排名优化公司
  • 企业网站的设计要求有哪些广西住房建设厅网站首页
  • 专业网站优化公司报价服务器网站域名系统装置
  • 门户网站建设需求模板谷歌官网登录入口
  • 网站开发需要团队吗中企动力是什么公司
  • 自己网站内容怎么才能被百度抓取无锡做公司网站
  • 微网站建设网络青岛关键词排名推广
  • 保定网站制作方案电商网站建设与课程设计
  • 网站开发的有关公司wordpress 英语