c# - yield 在现实生活中有哪些应用?

标签 c# .net yield

我知道 yield 的作用,我也看过几个例子,但我想不出现实生活中的应用,你有没有用它来解决一些具体问题?

(理想情况下是一些无法通过其他方式解决的问题)

最佳答案

我意识到这是一个老问题(在 Jon Skeet 之前?)但我最近一直在考虑这个问题。不幸的是,这里当前的答案(在我看来)没有提到 yield 语句最明显的优势。

yield 语句的最大好处是它允许您以比使用标准列表更高效的内存使用率迭代非常大的列表。

例如,假设您有一个返回 100 万行的数据库查询。您可以使用 DataReader 检索所有行并将它们存储在列表中,因此需要 list_size * row_size 字节的内存。

或者您可以使用 yield 语句创建一个迭代器,并且一次只在内存中存储一​​行。实际上,这使您能够在大型数据集上提供“流”功能。

此外,在使用 Iterator 的代码中,您使用一个简单的 foreach 循环,并可以根据需要决定从循环中跳出。如果您提前中断,那么当您只需要前 5 行时(例如),您就没有强制检索整个数据集。

关于:

Ideally some problem that cannot be solved some other way

yield 语句不会为您提供使用您自己的自定义迭代器实现无法完成的任何事情,但它使您无需编写通常需要的复杂代码。很少有问题(如果有的话)只能通过一种方法解决。

以下是提供更多详细信息的最近几个问题和答案:

Yield keyword value added?

Is yield useful outside of LINQ?

关于c# - yield 在现实生活中有哪些应用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17125/

相关文章:

ruby - rspec yield block ,但调用原始

c# - 在线程上启动多个服务

c# - 我应该在带有 Unity 容器的控制台应用程序中的何处注册解析我的类型?

c# - 如何在不加载 .dll 的情况下读取程序集 list

c# - 如何执行以下 Linq/Lambda 代码?

基于 try/finally + yield 的 Python 析构函数?

python - 有没有办法将脚本中的答案列表转换为产生的值?

c# - MySQL在表中存储表

c# - 程序集 'SomeAssembly, uses ' System.Web.Mvc,Version=4.0.0.0,其版本高于引用的程序集 'System.Web.Mvc,Version 3.0.0.0

.net - WPF中的数字编辑字段?