网站布局选择,重大军事新闻视频,辉煌电商seo,电影网站开发apiC#开发笔记概述
该文章的最新版本已迁移至个人博客【比特飞】#xff0c;单击链接 https://www.byteflying.com/archives/961 访问。
状态机可以理解为实现了备忘录模式#xff08;仅作为理解#xff09;的、能够记录状态的机器#xff0c;这个机器记录的是某个对象的中间…C#开发笔记概述
该文章的最新版本已迁移至个人博客【比特飞】单击链接 https://www.byteflying.com/archives/961 访问。
状态机可以理解为实现了备忘录模式仅作为理解的、能够记录状态的机器这个机器记录的是某个对象的中间状态。对于迭代器来说它所要记录的状态就是迭代器游标以指示外部的访问导致了迭代器中指针的位置发生了移动。
外部访问迭代器时无需关心迭代器内部的细节迭代器内部的细节由自身和备忘录仅作为理解来维护。每次迭代器被访问时游标向后移动一位外部无法准确知道游标当前所处位置也无需知道。当游标移动到最后一个元素之后时外部无法再获取迭代器内部维护的数据迭代终止条件达成迭代结束。
一般而言迭代器内部维护的数据是按顺序返回的但并不总是这样。若实现自己的迭代器可以根据业务逻辑选择是否顺序、逆序或随机不重复式返回。但不推荐这样做因为你可能需要额外的信息和逻辑来判断游标是不是真正的到“最后一个元素”以决定是否达到迭代终止条件。
如果你能理解上述观点的话我们再来看看 C# 2.0 中的 yield return。以下摘自微软官方对 yield return 的介绍。 使用 yield return 语句可一次返回一个元素。外部获取到了数据运行时为我们创建了一个状态机以便在接下来的过程中为我们记录迭代器游标状态
通过 foreach 语句或 LINQ 查询来使用迭代器方法。for each 循环的每次迭代都会调用迭代器方法。 迭代器方法运行到 yield return 语句时会返回一个 expression并保留当前在代码中的位置其实是状态机为我们之前的调用记录了状态。 下次调用迭代器函数时将从该位置重新开始执行。
可以使用 yield break 语句来终止迭代。
该文章的最新版本已迁移至个人博客【比特飞】单击链接 https://www.byteflying.com/archives/961 访问。 综上所述迭代器中的状态机仅仅是记录迭代器游标状态的 machine它是一个维护迭代器状态的 Black Box对外部代码透明。