#c# #interface
#c# #интерфейс
Вопрос:
Допустим, у нас есть следующий код:
public IEnumerator FirstTest()
{
yield return 1;
}
public IEnumerable SecondTest()
{
yield return 1;
}
Я знаю, что в коде нет логики, но он допустим, так почему же «yield» может возвращать другой тип, FirstTest возвращает IEnumerator, SecondTest возвращает IEnumerable? Между IEnumerator и IEnumerable нет отношения наследования
Комментарии:
1. Не забывайте, что компилятор умен. Существует очевидное, простое и универсальное решение, из
IEnumerable
которогоIEnumerator
можно выбраться.
Ответ №1:
Оба допустимы в соответствии с определением языка C # yield return
Объявление итератора должно соответствовать следующим требованиям:
Возвращаемый тип должен быть
IEnumerable, IEnumerable<T>, IEnumerator, or
.
IEnumerator<T>В объявлении не может быть никаких параметров in ref или out.
Ответ №2:
Функция-итератор может возвращать перечислимое, IEnumerable, IEnumerator или IEnumerator. Взаимосвязь между интерфейсами здесь не имеет значения, поскольку это особенность языка.
Из документации,
Объявление итератора должно соответствовать следующим требованиям:
- Возвращаемый тип должен быть IEnumerable, IEnumerable, IEnumerator или IEnumerator .
- В объявлении не может быть никаких параметров in ref или out.