I have a method that returns an IEnumerable like this..
public virtual IEnumerable ToPages(){
// foreach logic
yield return pages;
// more
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)
http://blogs.msdn.com/b/oldnewthing/archive/2008/08/12/8849519.aspx
http://blogs.msdn.com/b/oldnewthing/archive/2008/08/13/8854601.aspx
http://blogs.msdn.com/b/oldnewthing/archive/2008/08/14/8862242.aspx
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/