' System.Collections.IEnumerator'不包含' GetEnumerator'的公开定义

时间:2014-05-21 21:02:53

标签: c#

我正在尝试在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

的界面,这似乎很奇怪

1 个答案:

答案 0 :(得分:6)

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

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