В моих вечных поисках, чтобы сосать меньше, я пытаюсь понять инструкцию yield, но я все время сталкиваюсь с той же ошибкой.
Тело [someMethod] не может быть блоком итератора, потому что "System.Collections.Generic.List <AClass> 'не является типом интерфейса итератора.
Это код, где я застрял:
foreach (XElement header in headersXml.Root.Elements()){
yield return (ParseHeader(header));
}
Что я делаю неправильно? Могу ли я использовать доход в итераторе? Тогда какой смысл?
В этом примере сказано, что List<ProductMixHeader>
не является типом интерфейса итератора.
ProductMixHeader
- это настраиваемый класс, но я полагаю, что List
- это тип интерфейса итератора, no?
- Edit -
Спасибо за все быстрые ответы.
Я знаю, что этот вопрос не все, что новые и те же ресурсы продолжают появляться.
Оказалось, я думал, что могу вернуть List<AClass>
как возвращаемый тип, но поскольку List<T>
не ленив, он не может. Изменение моего типа возврата на IEnumerable<T>
решило проблему: D
Несколько связанный вопрос (не стоит открывать новый поток): стоит ли IEnumerable<T>
использовать тип возвращаемого типа, если я уверен, что в 99% случаев я собираюсь идти. ToList() в любом случае? Каковы будут последствия для производительности?