2010-03-25 1 views
7

Есть ли хороший ресурс, который объясняет концепцию счетчиков и пользовательских счетчиков? В частности, один с хорошим убедительным примером того, почему вы хотели бы реализовать IEnumerable и как вы могли бы эффективно использовать его?Где я могу узнать входы и выходы счетчиков в C#?

Я иногда встречаю yield, и я стараюсь лучше понять его.

+0

@slc ждать ответа Йон Скита .... –

+0

@Pandiya Chendur:: | – leppie

+0

@leppie, что это значит? –

ответ

8

Самый простой пример:

IEnumerable<string> GetNames() 
{ 
    yield return "Bob"; 
    yield return "Bob's uncle"; 
    yield return "Alice"; 
    yield return "Stacy"; 
    yield return "Stacy's mom"; 
} 

Использование:

foreach (var name in GetNames()) 
{ 
    Console.WriteLine(name); 
} 

Чтобы увидеть его в действии, поместите отладчик точки останова на каждой строке в методе GetNames.

+0

Это имеет смысл, но можете ли вы объяснить, как работает метод Count()? Заставляет ли он перечислить все результаты для их подсчета? Кроме того, почему у некоторого кода есть «выход из строя»? – NibblyPig

+0

'yield break' в основном говорит« stop, no more elements ». И да, 'Count()' (а не 'Count' или' Length') будет перебирать всю коллекцию, если у нее нет ярлыка (например, 'Count' и' Length'). – leppie

+0

спасибо leppie! теперь это начинает иметь смысл, но что вы подразумеваете под ярлыком? – NibblyPig

0

Хороший образец можно найти на странице MSDN для IEnumerable.

+1

Возможно, вы захотите дать английскую ссылку :) – leppie

+0

Я думал, что переключил свою культуру на en-us ... Thx! – Andrey

+0

К сожалению, этот образец не охватывает доходность, что, вероятно, является реальным источником путаницы. –

1

Самый лучший пример и ссылка, которую я нашел, на самом деле находятся в C# в глубине Книга от всемогущего Джона Скита. Это не слишком дорого, и это стоит того, что вы узнаете о C#.

+0

Обратите внимание, что это глава 6 в первом издании, которая раньше была (и, вероятно, еще) одной из бесплатных образцов. –

+0

У вас есть ссылка: http://www.manning-source.com/books/skeet/Chapter6sample.pdf –

+0

@Martinho: К сожалению, прямая ссылка не работает. Вам сначала нужно пройти через http://manning.com/skeet - я подозреваю, что он проверяет реферер. Но да, это все равно бесплатно :) –

3

Другая книга, которую я нашел весьма полезной, когда я узнал об IEnumerable и IEnumerator, - это книга Pro C# 2008 от Troelsen. Он объясняет, что содержит интерфейсы и как создавать итераторы с ключевым словом «yield».

Надеюсь, что эта помощь.

2

Вот еще несколько ресурсов после того, как вы потеряли основы.

Wes имеет большую статью о ТТХ итераторах:

http://blogs.msdn.com/wesdyer/archive/2007/03/23/all-about-iterators.aspx

Если у вас есть вопросы о том, почему существует так много странных ограничений на то, что вы можете сделать в блоке итератора, вот мои семь часть серии о том, что побудило необычные правила:

http://blogs.msdn.com/ericlippert/archive/tags/Iterators/default.aspx