问题标签 [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 投票
5 回答
283 浏览

.net - 你叫什么 IEnumerable?

我有时会发现自己在考虑在提及IEnumerable<Foo>. 我不认为我在阅读时看到一致的命名。

IEnumerable<Foo>: 这是一个类型名称。在思考或在句子中使用时没有帮助。

收藏:它是有效的,但不是到处使用。虽然我们有 System.Collections 命名空间。

序列:它也是有效的,并且可能更好地定义它。

EnumeratorIterator:它们强调操作,很少使用。

什么是最合适的?你在你的代码中读到了什么?

0 投票
5 回答
192909 浏览

c# - 简单的 IEnumerator 使用(示例)

我很难记住如何(但不知道为什么)IEnumerator在 C# 中使用 s。我已经习惯了 Java 的精彩文档,它很好地向初学者解释了一切。所以,请多多包涵。

我曾尝试从这些板上的其他答案中学习,但无济于事。与其问一个以前已经问过的通用问题,我有一个具体的例子可以为我澄清事情。

假设我有一个需要传递IEnumerable<String>对象的方法。该方法所需要做的就是将字母连接到迭代器roxxors中的每个末尾。String然后它将返回这个新的迭代器(当然原始IEnumerable对象保持原样)。

我该怎么办?当然,除了我之外,这里的答案应该可以帮助许多人解决有关这些对象的基本问题。

0 投票
4 回答
1158 浏览

c# - 使用 IEnumerable 检测修改

我有一个令我惊讶的问题还没有以这种格式被问到。

如果我有一个基于迭代数据源(并使用 yield return 语句)生成的 IEnumerable,我如何检测通过生成的 Enumerator 访问后源何时发生修改GetEnumerator 调用?

这是奇怪的部分:我不是多线程的。我认为我的问题在某个地方存在缺陷,因为这应该很简单。. . 我只想知道源何时更改并且迭代器已过时。

非常感谢。

0 投票
2 回答
249 浏览

c# - 在 foreach 循环 C# 中捕获行为

简单的问题,我相信 --> 我的理解是,当我在 IEnumerable 对象上使用 foreach 循环时,正在使用一个虚构的 IEnumerator 对象。我的问题如下:

如何在处理我的对象的 foreach 循环中“捕捉”非法行为?我特别想查看创建 IEnumerable 的原始对象是否已被修改。如果原来的已经被修改了,我想抛出一个异常。

我目前的方法是使用版本号。如果我创建一个显式迭代器并使用 MoveNext() 或类似的方法,这非常有用,但是 foreach 循环似乎欺骗了我的基于版本的方法。

0 投票
2 回答
435 浏览

c# - 如何为多个foreach实现正确的IEnumerator接口?

我有一个像这样的代码:

在上面的代码中一切正常,但是当我使用下一个时:

它打印(在括号中的第二个循环中): 0 1 (3 4) 2 而不是 0 1 (0 1 2 3 4) 2 3 4 我在 List 和 Collection 上测试了它,他们做得对。我怎样才能达到我所需要的?

0 投票
2 回答
306 浏览

ruby - 如何实现一个基本的 Enumerator 类?

我试图了解 Enumerator 类的工作原理。具体来说,我不知道 yielder 对象是如何创建并传递给构造函数所采用的代码块的。

这是我的第一次尝试:

它不起作用,当然是因为我不知道如何推进枚举器。有人可以帮助我理解如何实现它吗?

0 投票
2 回答
1295 浏览

c# - C# 类同时是 IEnumerable 和 IEnumerator。这有什么问题?

我有一个名为 GenericPermutations 的类,它既是可枚举的,又是枚举器。它的工作是获取一个有序的对象列表,并按顺序遍历它们的每个排列。

例如,此类的整数实现可以遍历以下内容:

所以它是可枚举的,因为它包含一个你可以枚举的东西的“列表”。它也是一个枚举器,因为它的工作涉及找到下一个排列。

问题:我目前正在尝试将 IEnumerator 和 IEnumerable 与此类集成,在我看来它应该两者兼而有之(而不是使用子类作为 IEnumerable)。到目前为止,我已经避免了尝试通过在方法中传递一个新的 GenericPermutation 对象来从中获取两个枚举数的问题GetEnumerator

这是一个坏主意吗?还有什么我应该考虑的吗?

0 投票
2 回答
13884 浏览

c# - 使用 ItemsSource 填充 WPF ListBox - 好主意?

我是(相对)经验丰富的 Cocoa/Objective-C 编码器,并且正在自学 C# 和 WPF 框架。

在 Cocoa 中,当填充 . 时NSTableView,将委托和数据源分配给视图相对简单。然后使用这些委托/数据源方法来填充表,并确定其行为。

我正在组合一个简单的应用程序,它有一个对象列表,我们称它们为Dog对象,每个对象都有一个public string name. 这是 的返回值Dog.ToString()

对象将显示在 中ListBox,我想使用与 Cocoa 类似的模式填充此视图NSTableViewDataSource。它目前似乎正在使用:

但我想知道这是多么正确。我已经安装 Visual Studio 不到一个小时,所以可以肯定地说我不知道​​自己在做什么。

  1. 这是正确的模式吗?
  2. 将第二项添加到列表 ( spot) 似乎可以ListBox正确更新,但我想知道是什么触发了更新?
  3. 如果我Pound在后台线程上更新会发生什么?
  4. 如何手动要求ListBox更新自身?(我什至需要吗?)

我知道我需要做的一个改变IEnumerable<Dog>是将实现重构到它自己的类中,比如DogListItemsSource,但我想确保在完善它之前我有一个可靠的方法。

随意在评论中指出我应该解决或记住的任何其他要点,无论大小。我想第一次以正确的方式学习这个。

0 投票
8 回答
10429 浏览

c# - 在 foreach 循环中手动增加一个枚举器

我在 foreach 循环中有一个嵌套的 while 循环,我想在满足某个条件时无限期地推进枚举数。为此,我尝试将枚举器强制转换为 IEnumerator< T > (如果它在 foreach 循环中则必须如此),然后在强制转换的对象上调用 MoveNext() 但它给了我一个错误,说我无法转换它。

无法通过引用转换、装箱转换、拆箱转换、包装转换或空类型转换将类型“System.DateTime”转换为 System.Collections.Generic.IEnumerator。

在 foreach 循环中手动增加 IEnumerator 的最佳方法是什么?

编辑:编辑显示while循环之后有代码,一旦满足条件,我想执行这就是为什么我想在while内手动递增然后打破它而不是继续,这会让我回到顶部. 如果这不可能,我相信最好的办法是重新设计我的工作方式。

0 投票
1 回答
5994 浏览

c# - 实现 IEnumerator 的类的序列化

我编写了一个可以序列化和反序列化的程序,它做得很好(一旦我让它在一个子类上正常工作,我计划在子类上实现它)。但是,当我决定希望能够使用Foreach.

在这不起作用之后,我发现必须实现IEnumeratorIEnumerable接口并将所需的方法添加到我的类中。所以我有,这确实让我可以循环浏览我的收藏。

当我尝试将这两件事结合起来时,问题就开始了......

序列化时,我最初收到此错误:

内: {"The type ThereIsOnlyRules.Army was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically."}

我添加[XmlInclude(typeof(Employee))]到我的类以防止此异常,但现在调用前两个根元素<ArrayofAnyType><AnyType>而不是<ArmyListing><Army>. 由于某种原因,我无法弄清楚如何将它们改回来[XmlRoot("whatever")]没有效果。

反序列化时出现此错误{"There is an error in XML document (0, 0)."} 内部:{"Root element is missing."}

我已经搜索过-但似乎可以通过多种不同的方式生成此错误。我还没有找到任何适用于我的代码的解决方案(据我所知)。

我非常感谢有关我遇到的这些问题的原因或解决方案的一些信息!

形式