Я пытаюсь использовать технологию yieldizi в С#:
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
GetEnumerator
возвращает IEnumerator
, но это метод IEnumerable
.
foreach
требует IEnumerable
и будет получать IEnumerator
внутренне. В большинстве случаев (например, с помощью foreach
или LINQ) вам никогда не придется самостоятельно обрабатывать IEnumerator
, если только по какой-то причине вы не пытались реализовать свой собственный итерируемый тип коллекции.
foreach
вызывает GetEnumerator, чтобы использоватьIEnumerator
. Проблема в том, как работаетforeach
.