Alex Rivera | Logout

Cannot step into a method returning IEnumerable<T>?

Asked 2011-04-18T16:28:04.823
32

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?

Edit
Report

2 Answers

42

The method isn't run until you enumerate into it.

foo.ToPages().ToList() // will enumerate and your breakpoint will be hit.
answered 2011-04-18T16:31:40.037
5

Your enumerable method will only execute once you actually try to access the members.

This is called "Deferred Execution" (see http://blogs.msdn.com/b/charlie/archive/2007/12/09/deferred-execution.aspx)

Try actually accessing the IEnumerable which is returned, or just call;

var p = obj.ToPages().ToList();
answered 2011-04-18T16:35:09.293

Your Answer