当前位置: 首页 > 编程语言 > C#

C#学习教程:.Net2迭代器的巧妙使用分享

时间:2023-04-10 13:37:48 C#

.Net2迭代器的巧妙使用C#2和VB.Net8引入了一个名为iterator的新函数,旨在使返回枚举器和制作枚举器变得更容易。然而,迭代器实际上是协程的一种有限形式,可以用来做许多与对象集合无关的有用事情。您在实际代码中见过哪些非标准的迭代器用法?我正在使用它们在ASP.NET中编写一个系统来创建一系列链接页面交互。如果您将用户与网站的对话想象成一系列请求和响应,则可以将交互建模为IEnumerable。从概念上讲,是这样的;IEnumerableSignupProcess(FormValuesform){//注册以欢迎页面开始,要求//用户接受许可。yieldreturnnewWelcomePageResponse();//如果他们不接受条款,//将他们引导到“无论如何谢谢”屏幕if(!form["userAcceptsTerms"]){yieldreturnnewThanksForYourTimePageResponse();屈服休息;}//在第二页,我们收集他们的电子邮件;EmailCapturePage("");while(!IsValid(form["address"])){//循环直到我们得到一个有效地址。yieldreturnnewEmailCapturePage("邮箱地址不正确,请修复。");您可以将迭代器存储在会话状态中,这样当用户返回站点时,您只需拉动迭代器,将迭代器移动到下一页,然后将其返回以呈现。复杂的站点交互编码在一个地方。当我开始时:我用它来递归迭代文件夹、子文件夹等中包含的文件。对于每个文件,我必须执行特定的操作。带有“yieldreturn”语句的递归函数对于其他人来说很容易理解。我在发现惰性yield运算符之前编写了这个函数。这递归地构建了一个大的迭代器并返回它。它不是很有效,但我认为它很聪明。静态成员generatePrimeNumbersmax=letrecgeneratenumbernumberSequence=ifnumber*number>maxthennumberSequenceelseletfilteredNumbers=numberSequence|>Seq.filter(funv->v=number||v%number0L)letnewNumberSequence=seq{foriinfilteredNumbers->i}letnewNumber=newNumberSequence|>Seq.find(funx->x>number)生成newNumbernewNumberSequencegenerate2L(seq{foriin2L..max->i})Rhino.ETL大量使用它结合了对输入序列的转换。例如,可以组合和重用的三个操作。以上就是C#学习教程:.Net2迭代器的巧妙使用。C#学习教程,希望大家多多关注—publicIEnumerableExecute(IEnumerablerows){foreach(varlineinFile.EnumerateLines()){varrow=newRow();row["key"]=int.Parse(line.Substring(1));收益率返回行;}}publicIEnumerableExecute(IEnumerablerows){foreach(varrowinrows){varvalue=(int)row["key"];行[“键”]=值+2;收益率返回行;}}publicIEnumerableExecute(IEnumerablerows){使用(varfile=newStreamwriter(filename)){foreach(varrowinrows){file.WriteLine(row["key"]);收益率返回行;}}}本文收集自网络,不代表立场。如涉及侵权请点击维权联系管理会员删除如需转载请注明出处: