В моем вечном задании, чтобы сосать меньше, я пытаюсь понять инструкцию «yield», но я все время сталкиваюсь с той же ошибкой.Некоторая помощь в понимании «доход»
Тело [SomeMethod] не может быть итератора блок, потому что «System.Collections.Generic.List < AClass>» не является типом интерфейса итератора.
Это код, где я застрял:
foreach (XElement header in headersXml.Root.Elements()){
yield return (ParseHeader(header));
}
Что я делаю неправильно? Могу ли я использовать доход в итераторе? Тогда в чем смысл? В этом примере сказано, что List<ProductMixHeader>
не является типом интерфейса итератора. ProductMixHeader
- это нестандартный класс, но я думаю, что List
- тип интерфейса итератора, нет?
--Edit--
Спасибо за все быстрые ответы.
Я знаю, что этот вопрос еще не все, что новые и те же ресурсы продолжают появляться.
Оказалось, я думал, что смогу вернуть List<AClass>
в качестве возвращаемого типа, но так как List<T>
не ленив, он не может. Изменение моего возвращения типа в IEnumerable<T>
решена проблема: D
Несколько связанный с этим вопрос (не стоит открывать новую нить): стоит ли давать IEnumerable<T>
как тип возвращаемого значения, если я уверен, что 99% случаев я m собирается идти. ToList() в любом случае? Каковы будут последствия для производительности?
Мне нравится способ, с помощью которого можно найти «стремление к сосать меньше» ;-). – 2008-11-25 14:21:04
Этот почти идентичный вопрос имеет ссылку на некоторые хорошие вещи Рэймонда Чена: http://stackoverflow.com/questions/39476/what-is-the-yield-keyword-used-for-in-c – 2008-11-25 14:24:32