System.Collections.IEnumerator не содержит общедоступного определения для GetEnumerator.

1

Я пытаюсь использовать технологию 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

Теги:

1 ответ

6

GetEnumerator возвращает IEnumerator, но это метод IEnumerable.

foreach требует IEnumerable и будет получать IEnumerator внутренне. В большинстве случаев (например, с помощью foreach или LINQ) вам никогда не придется самостоятельно обрабатывать IEnumerator, если только по какой-то причине вы не пытались реализовать свой собственный итерируемый тип коллекции.

  • 0
    Я бы добавил, что foreach вызывает GetEnumerator, чтобы использовать IEnumerator . Проблема в том, как работает foreach .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню