问题标签 [enumerators]

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 投票
1 回答
7023 浏览

c# - 收益返回相对于返回列表的并发性或性能优势

我想知道是否有任何并发​​性(现在或将来),或者使用收益返回而不是返回列表是否有性能优势。请参阅以下示例

处理方法

使用收益回报

返回列表

0 投票
7 回答
2292 浏览

c# - 为什么通过集合枚举会引发异常但遍历其项目不会

我正在测试一些同步结构,我注意到一些让我感到困惑的东西。当我枚举一个集合同时写入它时,它抛出了一个异常(这是预期的),但是当我使用 for 循环遍历集合时,它没有。有人可以解释一下吗?我认为 List 不允许读取器和写入器同时操作。我本来希望循环遍历集合会表现出与使用枚举器相同的行为。

更新:这是一个纯粹的学术练习。我知道如果同时写入列表,枚举列表是不好的。我也明白我需要一个同步构造。我的问题再次是关于为什么操作一个按预期抛出异常而另一个没有。

代码如下:

0 投票
4 回答
5395 浏览

ruby - 枚举器如何在 Ruby 1.9.1 中工作?

这个问题不是关于如何在 Ruby 1.9.1 中使用枚举器,而是我很好奇它们是如何工作的。这是一些代码:

在上面的代码中,我可以使用e = Bunk.new.each, 然后e.nexte.next来获取每个连续的元素,但是它究竟是如何暂停执行然后在正确的位置恢复呢?

我知道,如果将其中的产量0.upto替换为Fiber.yieldthen 很容易理解,但这里并非如此。这是一个普通的旧的yield,那么它是如何工作的?

我查看了 enumerator.c 但对我来说几乎无法理解。也许有人可以在 Ruby 中提供一个实现,使用纤维,而不是 1.8.6 风格的基于延续的枚举器,这一切都清楚了吗?

0 投票
6 回答
1968 浏览

c# - 为什么.NET 没有双向枚举器?

在 SO 上已多次询问如何实现双向枚举器(此处此处)。我的问题不是如何(在大多数情况下这是微不足道的),而是为什么.NET 平台中不存在这种类型。

显然,有许多集合类型无法实现这一点,因为它们MoveNext()具有破坏性或改变底层集合的状态。但相反,许多类型可以简单地实现这一点(List, IList, LinkedList, array)。

为什么不存在这种类型?

0 投票
2 回答
173 浏览

c# - 迭代时更改集合中的项目字段会使集合无效吗?

如果这样做:

我对集合的迭代器会变得无效吗?

谢谢

0 投票
3 回答
4773 浏览

c# - F#产量!运算符 - 实现和可能的 C# 等效项

我目前正在学习 F#,我真的很喜欢yield!(yield-bang) 运算符。不仅因为它的名字,当然也因为它的作用。

yield!运算符基本上允许您从序列表达式中生成序列的所有元素。这对于组成枚举数很有用。因为我经常遇到大而复杂的枚举器,所以我对我们可以用来分解它们并从更简单的枚举器组合它们的策略感兴趣。

不幸的是,该yield!运算符在 C# 中不可用。据我了解,它的作用类似于foreach (var x in source) yield x;但我正在阅读的书(Petricek's Real World F# - Manning)表明它具有更好的性能......

  • 那么 F# 编译器到底做了什么?(是的,我也可以使用 Reflector 来查看它,但我想对该机制进行更详细的描述)。

为了在 C# 中实现类似的构造,我探索了多种方法,但没有一种方法像yield!运算符那样简洁,我也不确定它们的复杂性。如果我的 BigO 号码正确,有人可以提供输入吗?

  • 将枚举器分解为多个私有枚举器,然后从公共枚举器中产生每个元素:

    这将有效地导致每个元素的“双倍产量”。那是O(2n)吗?(或者可能更糟?)无论如何,使用这种方法会阻止我使用我yield break;的任何子部分。

  • 将枚举器分解为多个私有枚举器,然后从公共枚举器中连接所有私有枚举器:

    我相信这与上述解决方案没有什么不同,因为Concat()它是按照我上面概述的方式实现的。

还有其他选择吗?

0 投票
1 回答
19632 浏览

c# - 什么是 C# 迭代器和生成器,我如何使用它们

我是一名 VB.Net 开发人员,是 C# 的新手,在查看 C# 文档时,我通过迭代器和生成器,无法完全理解其用途,我有任何人可以解释(在 vb 感知中;如果可能的话)

0 投票
4 回答
1179 浏览

c# - foreach 是否将 IEnumerator/IEnumerable 用于内置类型?

foreach 循环是否使用接口IEnumerator并且IEnumerable仅用于迭代自定义类型(类)的对象或也用于迭代内置类型(在幕后)?

0 投票
1 回答
391 浏览

asp-classic - ASP Classic FOR EACH 循环如何工作

我现在想知道ASP Classic/VB6 FOR EACH循环是如何工作的。我知道 .NET 涉及 IEnumberable/IEnumerator,但是 VB6/ASP Classic 是如何做到的呢?

谢谢!

0 投票
1 回答
3322 浏览

c# - 无法隐式转换类型您是否缺少演员表?数组、枚举器和 Web 服务

我正在尝试将肥皂消息发送到外部系统,该系统已经具有预定义的数据类型,我必须使用数组和枚举器将其集成到我的代码中。

我的问题是枚举变量给了我以下错误:

错误 1 ​​无法将类型“UpdateRatePacks._Default.Rate.AvailAppType”隐式转换为“UpdateRatePacks.IService.AvailAppType?”。存在显式转换(您是否缺少演员表?)

错误说它无法将我页面上的类型转换为我的 web 服务上的类型,但是数据结构是相同的,我错过了什么吗?

我到处搜索了这个错误,也搜索了 Web 服务中的枚举器、数组中的枚举器、将枚举器转换为数组,但没有任何效果。错误仍然相同。

甚至包括这行代码用于解析转换:

这段代码的复杂性在于它在数组中包含枚举器,所以我不知道我是在枚举器中出错还是在数组本身或整个 Web 服务中出错。

这是我的代码的一部分,它将更新作为错误来自的消息发送

ureq 是我发送到的 web 服务中的 UpdateRatePacks 方法

下面定义的类/对象:

任何建议将不胜感激。