Question: I have a method that returns an IEnumerable like this..

```
public virtual IEnumerable<Page> ToPages(){
  // foreach logic
  yield return pages;

  // more foreach logic
  yield return otherPages;

  // etc
}

```

The method seems to work ... in a way. But what's really baffling is that I cannot step into it! I place debugger points all around, and the debugger just passes right through them!!! 

Does anyone know why this might occur?

Answer: 
As others have noted, the body of an iterator block is not executed until the iterator is actually *moved*. Just creating the iterator does nothing other than creating it. People often find this confusing.

If the design and implementation of iterator blocks interests you, here are some good articles on the subject:

Raymond Chen: (short introduction to the basic points)

* <https://devblogs.microsoft.com/oldnewthing/20080812-00/?p=21273>
* <https://devblogs.microsoft.com/oldnewthing/20080813-00/?p=21253>
* <https://devblogs.microsoft.com/oldnewthing/20080814-00/?p=21243>

Jon Skeet: (long, in depth)

<http://csharpindepth.com/Articles/Chapter6/IteratorBlockImplementation.aspx>

Eric Lippert (me): (advanced scenarios and corner cases)

<http://blogs.msdn.com/b/ericlippert/archive/tags/iterators/>
Try putting a break on the yield. That should fix it.