问题标签 [yield]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
14 回答
4887 浏览

c# - yield 在 LINQ 之外有用吗?

当我认为我可以使用 yield 关键字时,我会后退一步,看看它将如何影响我的项目。我总是最终返回一个集合而不是 yeilding,因为我觉得维护 yeilding 方法状态的开销并没有给我带来太多好处。在我返回集合的几乎所有情况下,我觉得 90% 的时间,调用方法将遍历集合中的所有元素,或者将在整个集合中寻找一系列元素。

我确实理解它在 linq 中的用处,但我觉得只有 linq 团队在编写如此复杂的可查询对象,因此 yield 是有用的。

有没有人写过类似或不喜欢 linq 的东西,其中 yield 有用?

0 投票
4 回答
29676 浏览

c# - 为什么 yield return 不能出现在带有 catch 的 try 块中?

以下是可以的:

finally当整个事情完成执行时,该块运行(IEnumerator<T>支持IDisposable提供一种方法来确保这一点,即使枚举在它完成之前被放弃)。

但这不行:

假设(为了论证)WriteLinetry 块内的一个或其他调用引发了异常。继续执行catch块有什么问题?

当然,yield return 部分(当前)无法抛出任何东西,但是为什么这会阻止我们使用封闭的try/catch来处理在 a 之前或之后抛出的异常yield return呢?

更新:这里有来自 Eric Lippert的有趣评论- 似乎他们在正确实施 try/finally 行为时已经遇到了足够多的问题!

编辑:有关此错误的 MSDN 页面是:http: //msdn.microsoft.com/en-us/library/cs1x15az.aspx。但是,它没有解释原因。

0 投票
10 回答
2006 浏览

c# - 产生关键字附加值?

仍然试图找到在实际情况下我会在哪里使用“yield”关键字。

我看到这个主题的主题

C# 中使用的 yield 关键字是什么?

但在接受的答案中,他们以此为例,有人在 Integers() 周围进行迭代

但为什么不直接使用

而是在这里。似乎更直接..

0 投票
3 回答
1593 浏览

.net - 如何使用生成器遍历树结构?

我试图弄清楚如何在树节点中实现一个函数,该函数返回其所有后代叶子(无论是直接的还是间接的)。但是,我不想传递将递归放置叶节点的容器(树可能很大),而是我想使用生成器来遍历树。我尝试了几种方法,但到目前为止没有一种方法有效。这是我最接近可能的解决方案的一个:

但这也不起作用。我究竟做错了什么?如果同一个函数中有一个 yield 语句,似乎递归调用 .EnumerateLeaves 将不起作用。

任何帮助将不胜感激。提前致谢。

编辑:我忘了提到一个分支可以有叶子或分支作为孩子,因此递归。

0 投票
2 回答
777 浏览

vb.net - CCR、产量和 VB.net

我一直在尝试了解 CCR(并发和协调运行时),看看它是否值得学习。

我主要在 Vb.net 中编程,并且在大多数使用 CCR 的示例中使用 Yield 关键字。

Yield 对使用 CCR 有多重要?有解决方法吗?VB.net 会得到 Yield 命令吗?(如果不是为什么不呢?)

0 投票
2 回答
1383 浏览

c# - yield 方法中的垃圾回收

假设我有这样的方法(从 Jon Skeet 之前的 SO 回答中窃取):

在这种方法中,我有一个 HashSet 用于保存已看到的键。如果我在这样的事情中使用这种方法。

这只会枚举字符串列表中的前两项。但是垃圾收集如何收集 seenKeys 哈希集。由于 yield 只是暂停了方法的执行,如果方法很昂贵,我怎么能确保我正确地处理东西?

0 投票
6 回答
27588 浏览

c# - 收益中断有什么用?

可能重复:
“yield break”是什么意思?在 C# 中做?

任何人都可以看到使用“break”或“return”无法实现的“yield break”语句的用途。

这种说法似乎完全没有用。更重要的是,如果没有这个语句,“yield return X”语句可能会被简化为“yield X”,这样更易​​读。

我错过了什么?

0 投票
3 回答
889 浏览

c# - 过度使用收益回报

我没有太多使用 yield 关键字的经验。我有这些用于类型转换的 IEnumerable<T> 扩展。

我的问题是第一个重载方法是否具有与我从第二种方法获得的相同的收益返回效果?

0 投票
2 回答
2312 浏览

c# - 如何使用 PagedList 使我产生的 IEnumerable 工作

我在我的项目中使用了Troy Goode 的分页列表
通常你只需给它一个 IEnumerable、一个 startindex 和一个项目计数,它就可以工作了。
但是,现在我正在尝试为它提供一个我生成的 IEnumerable,如下所示:

--EDIT-- pagedList 有效,但请求我的所有 Color 对象的收益,而不仅仅是分页的对象。这当然会破坏 PagedList 的整个使用,并可能导致大量枚举。

--EDIT--
我认为我需要的是一种实现 Count() 的方法,这样我就可以让它从 ids.Distinct(int) 返回计数,而不是通过 ColorService.GetColor() 创建所有对象,然后计算该列表.

0 投票
6 回答
5925 浏览

python - 在 Python 生成器中使用 for...else

我是 Python 的for...else 语法的忠实拥护者——令人惊讶的是它的适用频率以及简化代码的效率。

但是,我还没有想出在生成器中使用它的好方法,例如:

在上面的示例中,我希望仅当为空print时才执行该语句。i但是,else仅考虑breakreturn,它总是被执行,而不管 的长度i

如果不可能以for...else这种方式使用,那么最好的方法是什么,以便print仅在没有产生任何内容时执行该语句?