2010-07-07 6 views

ответ

11

Возврат дохода автоматически создает счетчик для вас.

http://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx

Таким образом, вы можете сделать что-то вроде

//pseudo code: 

while(get_next_record_from_database) 
{ 
    yield return your_next_record; 
} 

Это позволяет быстро создать коллекцию объектов (счетчику), который вы можете перебрать и извлечения записей. Оператор return yield обрабатывает весь код, необходимый для создания перечислителя для вас.

Большая часть оператора возврата доходности состоит в том, что вам не нужно загружать все элементы в коллекции, прежде чем возвращать коллекцию вызывающему методу. Он позволяет получить lazy loading из коллекции, поэтому вы не платите штраф за доступ сразу.

Когда использовать Yield Return.

1

yield используется в качестве синтаксического сахара, чтобы вернуть объект IEnumerable<T> или IEnumerator<T>, не используя собственный класс, реализующий эти интерфейсы.

+0

?? Почему вниз вниз? Я неверен? – spoulson

+0

Да, потому что он отличается от создания IEnumerable и его возврата. –

+2

В этом ответе нет ничего неправильного. –

0

yield позволяет испускать IEnumerable, где вы обычно возвращаете более конкретный тип (например, IList).

This is a pretty good example of how it can simplify your code and clarify your intent. Что касается того, где вы будете использовать его, где бы вы ни находились на своих страницах, которые вам нужны для итерации по коллекции, вы могли бы использовать метод, который возвращает IEnumerable вместо List/Dictionary/etc.

4

Выход - это нечто большее, чем синтаксический сахар или простые способы создания IEnumerables.

Для получения дополнительной информации я проверил блог Justin Etherage, который has a great article explaining more advanced usages of yield.

+0

Абсолютно. Вы не можете полностью оценить «доходность», пока не поймете, как именно он создает для вас конечный автомат. Это невероятно мощно. –

+0

Черт, это полезно. Я знаю, что это старо, но этот пост действительно сделал это для меня. – Terrance

1

Я написал простой пример, показывающий, как вызывается блок доходности во время цикла посещения коллекции. Проверьте это here.

Смежные вопросы