Я использовал их для написания системы в ASP.NET для создания серии взаимосвязанных взаимодействий страниц. Если вы представляете себе разговор пользователя с веб-сайтом в виде серии запросов и ответов, вы можете моделировать взаимодействие как IEnumerable
. Концептуально, как это;
IEnumerable<PageResponse> SignupProcess(FormValues form)
{
// signup starts with a welcome page, asking
// the user to accept the license.
yield return new WelcomePageResponse();
// if they don't accept the terms, direct
// them to a 'thanks anyway' screen
if (!form["userAcceptsTerms"])
{
yield return new ThanksForYourTimePageResponse();
yield break;
}
// On the second page, we gather their email;
yield new EmailCapturePage("");
while(!IsValid(form["address"]))
{
// loop until we get a valid address.
yield return new EmailCapturePage("The email address is incorrect. Please fix.");
}
}
Вы можете хранить итератор в состоянии сеанса, так что, когда пользователь возвращается на сайт вы просто вытащить итератор из переместите итератор на следующую страницу, и выход его обратно для рендеринга. Комплексные взаимодействия сайтов кодируются в одном месте.
Зачем ограничивать его C#? – ChaosPandion
@Chaos: Я не понимал, что они также поддерживаются VB. Ред. – SLaks
На самом деле, итераторные блоки вообще не являются «.NET» (значение: runtime). Это языковые функции, полностью обеспечиваемые компилятором. –