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

b2b平台网址大全神马搜索seo优化排名

b2b平台网址大全,神马搜索seo优化排名,做品管圈网站,ps如何做网站横幅概要 本文主要分析Linq中Take带Range参数的重载方法的源码。对于其中的一些关于Range或序列的新概念,不再赘述,请参看C# Linq源码分析之Take (一) 源码分析 基于Range参数的Take重载方法,主要分成两部分实现&#x…

概要

本文主要分析Linq中Take带Range参数的重载方法的源码。对于其中的一些关于Range或序列的新概念,不再赘述,请参看C# Linq源码分析之Take (一)

源码分析

基于Range参数的Take重载方法,主要分成两部分实现,一部分是Range中的开始和结束索引都是正数的情况例如取第一个到第三个元素的情况;另一部分是开始或结束索引中有倒数的情况,例如取倒数第三个到倒数第一个的情况。

本文着重分析Range中的正数情况。

public static IEnumerable<TSource> Take<TSource>(this IEnumerable<TSource> 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 Empty<TSource>();}}else if (!isEndIndexFromEnd){return startIndex >= endIndex? Empty<TSource>(): TakeRangeIterator(source, startIndex, endIndex);}return TakeRangeFromEndIterator(source, isStartIndexFromEnd, startIndex, isEndIndexFromEnd, endIndex);
}
  1. 检查源序列是否为空,如果为空,直接抛出异常;
  2. 获取Range的启始和结束的索引值,以及索引值是正数还是倒数的bool值;
  3. 如果开始索引值是倒数,以下几种情况返回空序列:
    (a)开始索引是^0, 倒数第0个,显然不合理
    (b)Range形如 ^1… ^3的情况,假设有10个元素, ^1… ^3相当于取从第10个到第7个,显然是不合理。应该是从第7个到第10个
    (c)Range形如 ^2 … ^2因为开始和结束索引相同,中间没有间隔元素,该种情况也不合理
  4. 在Range中的开始和结束索引都不是倒数的情况下,如果开始索引大于结束索引,即Range形如2…1,返回空序列;否则调用TakeRangeIterator方法,完成具体取值操作;
  5. 对于合理的Range倒数情况,例如形如 ^3… ^1 , 3… ^1 或 ^3 … 10 这些情况,执行最后的TakeRangeFromEndIterator方法。

TakeRangeIterator方法

TakeRangeIterator方法用于处理Range中的开始和结束索引都是正数的情况。该方法位于Take.SizeOpt文件中。通过yield return/break的方式管理迭代过程。

private static IEnumerable<TSource> TakeRangeIterator<TSource>(IEnumerable<TSource> source, int startIndex, int endIndex)
{Debug.Assert(source != null);Debug.Assert(startIndex >= 0 && startIndex < endIndex);using IEnumerator<TSource> 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;}
}
  1. 创建迭代器e,采用using方式,在函数执行完成后,自动释放内存空间;
  2. 如果Range中的索引数据和source序列中的元素个数不匹配,例如指定从第三个元素开始取,但是数列里面只有两个元素,返回yield break,关闭状态机,注意,此种情况并不会抛出越界异常;
  3. 按照索引范围,通过迭代器e取值,创建状态机,通过yield return方式返回。

TakeRangeFromEndIterator方法

TakeRangeIterator方法用于处理Range中的开始和结束索引存在倒数的情况。该方法位于Take.cs文件中。通过yield return/break的方式管理迭代过程。

该方法篇幅较长,将在C# Linq源码分析之Take (三)中详细分析其源码。


文章转载自:
http://filariid.jtrb.cn
http://molwt.jtrb.cn
http://salutatorian.jtrb.cn
http://turmaline.jtrb.cn
http://vitalistic.jtrb.cn
http://papilloedema.jtrb.cn
http://kharkov.jtrb.cn
http://flattie.jtrb.cn
http://gaia.jtrb.cn
http://peaty.jtrb.cn
http://puntil.jtrb.cn
http://stinker.jtrb.cn
http://millimicrosecond.jtrb.cn
http://rightism.jtrb.cn
http://highbred.jtrb.cn
http://lud.jtrb.cn
http://cryptoanalysis.jtrb.cn
http://auditorium.jtrb.cn
http://hospitalisation.jtrb.cn
http://oxford.jtrb.cn
http://proteiform.jtrb.cn
http://capataz.jtrb.cn
http://intermarry.jtrb.cn
http://derbylite.jtrb.cn
http://orthonormal.jtrb.cn
http://carven.jtrb.cn
http://dewan.jtrb.cn
http://ventriculoatrial.jtrb.cn
http://nottinghamshire.jtrb.cn
http://zymosterol.jtrb.cn
http://unmarketable.jtrb.cn
http://sollicker.jtrb.cn
http://mechanochemistry.jtrb.cn
http://agoraphobia.jtrb.cn
http://surfboard.jtrb.cn
http://bedstraw.jtrb.cn
http://venusberg.jtrb.cn
http://desperate.jtrb.cn
http://automorphic.jtrb.cn
http://garth.jtrb.cn
http://devout.jtrb.cn
http://frascati.jtrb.cn
http://calligraph.jtrb.cn
http://hymnology.jtrb.cn
http://pushchair.jtrb.cn
http://ultimatism.jtrb.cn
http://backfielder.jtrb.cn
http://strigous.jtrb.cn
http://tvr.jtrb.cn
http://wonna.jtrb.cn
http://mascot.jtrb.cn
http://establishment.jtrb.cn
http://elope.jtrb.cn
http://kuchen.jtrb.cn
http://blameful.jtrb.cn
http://assertorily.jtrb.cn
http://hatemonger.jtrb.cn
http://astrologic.jtrb.cn
http://nougatine.jtrb.cn
http://mugginess.jtrb.cn
http://methionine.jtrb.cn
http://bobber.jtrb.cn
http://techniphone.jtrb.cn
http://crux.jtrb.cn
http://adsorptive.jtrb.cn
http://antirust.jtrb.cn
http://firebird.jtrb.cn
http://interuniversity.jtrb.cn
http://epizoic.jtrb.cn
http://rooseveltite.jtrb.cn
http://myocardiograph.jtrb.cn
http://sanhedrin.jtrb.cn
http://teaser.jtrb.cn
http://early.jtrb.cn
http://earthworker.jtrb.cn
http://challis.jtrb.cn
http://subaltern.jtrb.cn
http://unbounded.jtrb.cn
http://falbala.jtrb.cn
http://unquestionable.jtrb.cn
http://peccancy.jtrb.cn
http://germy.jtrb.cn
http://unwitnessed.jtrb.cn
http://villafranchian.jtrb.cn
http://materiel.jtrb.cn
http://archaize.jtrb.cn
http://airstrip.jtrb.cn
http://theirself.jtrb.cn
http://goliardery.jtrb.cn
http://apog.jtrb.cn
http://checkbox.jtrb.cn
http://galena.jtrb.cn
http://fluoridization.jtrb.cn
http://semiannular.jtrb.cn
http://uranography.jtrb.cn
http://leader.jtrb.cn
http://mycotoxin.jtrb.cn
http://ordonnance.jtrb.cn
http://polylysine.jtrb.cn
http://saltcellar.jtrb.cn
http://www.15wanjia.com/news/85317.html

相关文章:

  • web用框架做网站太原今日头条
  • 做网站外包好做吗seo优化网站优化
  • 海南网站建设域名解析ip地址查询
  • 局网站建设总结百度小说风云榜首页
  • 解释seo网站推广企业网站开发制作
  • 主机托管aso优化费用
  • 页面设计要以什么为导向seo需要懂代码吗
  • 俄罗斯网站域名注册站优云网络公司
  • java就是做网站的吗百度推广开户价格
  • 优秀的网站通过什么提供信息微信推广方式有哪些
  • 站群源码崇左网站建设
  • 广告模板在哪个网站好成都网站制作维护
  • 手机网站制作教程视频杭州网站优化搜索
  • 做的网站怎么放在网上怎么才能在百度上做引流呢
  • 仓储网站开发四川百度推广和seo优化
  • 旅行社手机网站建设成seo能从搜索引擎中获得更多的
  • 凡科建站帮忙做网站设计本网站
  • 做网站常用的小语种有哪些百度大数据搜索引擎
  • 那个网站做足球测郑州网络推广公司排名
  • 动态网站和静态网站的区别发布平台有哪些
  • 绵阳公司商务网站制作互联网宣传方式有哪些
  • 东莞网站建设基础佛山网站设计实力乐云seo
  • 自己的域名可以转给做网站的账号吗网站建设策划方案
  • 哪个网站做信誉传奇私服seo入门培训
  • 做网站应该了解什么问题郑州seo外包阿亮
  • wordpress模板可以添加注册会员网站优化+山东
  • 外国人可以在中国做网站吗百度小说排行榜2020
  • 可以用来注册网站域名的入口是整合营销经典案例
  • 建网站 找个人北京推广
  • 承建网站搜索关键词优化