问题标签 [ienumerator]

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 投票
3 回答
13051 浏览

c# - 如何使用 IEnumerator.Reset()?

正确的调用方式到底是怎样的IEnumerator.Reset

文档说:

Reset方法是为 COM 互操作性提供的。它不一定需要实施;相反,实现者可以简单地抛出一个NotSupportedException.

好吧,这是否意味着我不应该打电话给它?

使用异常进行流控制非常诱人:

这就是我们应该使用的方式吗?或者我们根本不打算从托管代码中使用它?

0 投票
2 回答
2224 浏览

c# - 实现集合的简单方法?

我正在开发一个集合类,它应该实现 IEnumerator 和 IEnumerable。

在我的第一种方法中,我直接实现了它们。现在我发现了 yield 关键字,并且我已经能够用一个只读属性 Values 替换 IEnumerator/IEnumerable 接口来简化一切,该属性使用 yield 在循环中返回一个 IEnumerable。

我的问题:是否可以在不实现 IEnumerable/IEnumerator 的情况下以可以迭代类本身的方式使用 yield?

即,我想要一个类似于框架集合的功能:

这可能吗?

更新:看来我的问题措辞不当。我不介意实现 IEnumerator 或 IEnumerable;我只是认为唯一的方法是使用旧的 Current/MoveNext/Reset 方法。

0 投票
2 回答
2198 浏览

c# - 清理 IDisposable 问题

我试图调用这些函数来摆脱我不需要的东西,但我的代码似乎在我开始认为是徒劳的斗争中打败了我。我尝试了多种方法来解决最后两个错误,但 IEnumerator 给了我通配符。错误在行:如果(枚举器2是IDisposable)和如果(枚举器是IDisposable)

编辑-特定错误消息:使用未分配的局部变量“enumerator2”
使用未分配的局部变量“enumerator”

0 投票
2 回答
5491 浏览

file - 如何使用 SSIS 包中的 Foreach 循环容器选择最近创建的文件夹?

我在 SSIS 遇到了一个有趣的挑战。使用 for-each 文件枚举器,我需要选择最近创建的子文件夹,然后遍历每个文件。

也许一个例子会更好地解释。文件夹如下所示:

c:\数据\2011-0703

c:\数据\2011-0626

c:\数据\2011-0619

您如何为每个文件枚举器选择最近的文件夹?这可以通过查看创建日期或比较文件名来实现。

我猜这将通过枚举器中的表达式来完成,只是无法弄清楚如何!在网上也找不到任何东西。

谢谢

0 投票
2 回答
540 浏览

c# - 如何返回 IEnumerable如果有一个收益,则收集

如果我想返回输入集合,在迭代器块中使用 return 语句而不是 foreach 的最聪明的方法是什么?

0 投票
1 回答
2607 浏览

linq-to-sql - 从 LinQ 结果集中获取列数和列名

我正在创建一个网格视图用户控件,我想知道如何从 LinQ 结果集中获取列数和列名。这将用于创建动态网格视图。

我在这里有一个课程:

在我的网格视图中,它具有接收结果集的这个属性。

有没有办法做到这一点?

0 投票
2 回答
141 浏览

c# - 如何创建范围有限的子枚举器?

假设我有 100 个元素的集合。常规枚举器将遍历这 100 个元素。

我想创建范围从“hehe”到“there”的枚举器(它基于常规枚举器,即它不是每个集合,而是一种通用方法)——我可以有例如迭代仅在中间超过 20 个元素。

因此,在这种情况下,当我调用“scoped_iter.Reset()”时,它会被重置为其第 0 个元素(整个集合的第 10 个元素)。

而且它也仅“看到” 10-30 中的元素。

问题是——如何实现这样的枚举器?

编辑

1.

我需要来自“这里”的迭代器,而不是来自“那里”的迭代器,因为到达“那里”可能非常耗时。不过这确实是小事,最有问题的是Reset方法。

2.

乔恩询问了背景。我真正尝试实现的是对集合进行切片(即,你有——比如说——10 个字符串的集合,但你想将其解释为 5 个元素的集合,每个元素是 2 个字符串的集合)。朴素算法非常简单,但也非常低效。收集~16MB(字符串列表),我想到了另一种方法——简单地重新解释数据,而不复制它。所以我会创建一个迭代器,它从整个集合中挑选每个 SIZE_OF_SLICE 元素,并且我会创建这个范围内的迭代器,它将从第一个迭代器开始,然后选择 SIZE_OF_SLICE 元素。

这样数据将被重新使用,唯一的区别是你如何迭代它。切片就足够了,而且应该很快。

3

我为 IList 实现了有效的切片(一旦你假设你有索引器,它就是小菜一碟)但它让我感到不安,你不能(?)为列表(LinkedList)和数组(List)提供通用的高效算法。因此,如果您正在阅读本文,并且知道如何去做,请不要犹豫回答,即使 10 年后也是如此(假设 C# 仍将与我们同在)。

0 投票
1 回答
251 浏览

windows-phone-7 - 遍历枚举并检查 MediaPlayer 的状态,然后再前进到下一首歌曲

我需要在我的 IEnumerable 集合中播放歌曲,但是这种方法存在很多问题。如果我使用计时器检查 MediaState,它可能会起作用,但是当我从该页面导航时,课程将被取消并且音乐将停止。我想这样做的原因是能够播放不同专辑中的歌曲:

我的代码:

0 投票
2 回答
186 浏览

c#-2.0 - Rhino Mocks:存根 IEnumerator

我正在开发一个小的 .net 2.0 项目。我到了需要测试一些采用 IEnumerator 的类的方法的地步。几天前我学会了使用 Rhino Mocks 我写了以下测试

这是方法代码

当我尝试运行时,它不会停止,因为它只使用第一个 MoveNext() 注入值并启动一个循环。

如果有人能指出我做错了什么,我将不胜感激?

谢谢

0 投票
1 回答
407 浏览

c# - 帮助在 C# 中编译通用 AVL 树(IEnumerator 问题)

我在尝试实现的 AVL 树中遇到了一些编译错误。有什么东西让整个枚举器失望了。在我尝试实现一个辅助类之前,它编译得很好。我认为这与 BTNode 本身是一个私有嵌套类有关,但尝试将其公开只是为了看看会发生什么,但无济于事。

我对此有点难过,不应该进行任何转换。

任何帮助将不胜感激。

这是源代码,我已经注意到编译错误的位置,并分解了不同的嵌套类以便于阅读。

节点类——

枚举器辅助类——

--

--

安...