【问题标题】:'System.Collections.IEnumerator' does not contain a public definition for 'GetEnumerator'“System.Collections.IEnumerator”不包含“GetEnumerator”的公共定义
【发布时间】:2014-07-10 17:14:11
【问题描述】:

我正在尝试在 C# 中使用 yield mechanizmi:

public void ScanLoop( OnScanStatus statusCallback, int graphId = -1 ) {
    foreach ( int it in _scanLoop( statusCallback, graphId ) ) {
    }
}

public IEnumerator _scanLoop( OnScanStatus statusCallback, int graphId ) {
    ...
    }

我在编译过程中得到的错误是:

错误 23 foreach 语句不能对类型变量进行操作 'System.Collections.IEnumerator' 因为 'System.Collections.IEnumerator' 不包含公共定义 对于'GetEnumerator'

谁能告诉我为什么?从我看到的IEnumerable 看来很奇怪是包含 GetEnumerator 的接口

【问题讨论】:

  • IEnumerable是包含GetEnumerator的接口。该方法返回IEnumerator 的实例。

标签: c#


【解决方案1】:

GetEnumerator 返回一个IEnumerator,但它是IEnumerable上的一个方法。

foreach 需要IEnumerable,并且会在内部获得IEnumerator。大多数时候(例如,使用foreach 或 LINQ)您永远不需要自己处理IEnumerator,除非出于某种原因您试图实现自己的可迭代集合类型。

【讨论】:

  • 我要补充一点,foreach 调用 GetEnumerator 以获取 IEnumerator 使用。这里的问题是foreach 的工作原理。
猜你喜欢
  • 2023-03-16
  • 1970-01-01
  • 2014-04-24
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
  • 2013-02-16
  • 2021-10-18
  • 2014-05-08
相关资源
最近更新 更多