我正在尝试在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 的界面,这似乎很奇怪
答案 0 :(得分:6)
GetEnumerator
返回 IEnumerator
,但它是IEnumerable
上的方法。
foreach
需要IEnumerable
,并且会在内部获得IEnumerator
。大多数情况下(例如使用foreach
或LINQ),您永远不需要自己处理IEnumerator
,除非出于某种原因您尝试实现自己的可迭代集合类型。