Cie*_*iel 23 c# visual-studio-2010
我有一个返回像这样的IEnumerable的方法..
public virtual IEnumerable<Page> ToPages(){
// foreach logic
yield return pages;
// more foreach logic
yield return otherPages;
// etc
}
Run Code Online (Sandbox Code Playgroud)
这种方法在某种程度上似乎有效.但真正莫名其妙的是我无法介入它!我把调试器点放在周围,调试器只是通过它们!
有谁知道为什么会这样?
Tal*_*joe 34
在枚举之前,该方法不会运行.
foo.ToPages().ToList() // will enumerate and your breakpoint will be hit.
Run Code Online (Sandbox Code Playgroud)
正如其他人所指出的那样,迭代器块的主体在实际移动迭代器之前不会执行.只是创建迭代器只会创建它.人们经常发现这令人困惑.
如果迭代器块的设计和实现对您感兴趣,这里有一些关于这个主题的好文章:
Raymond Chen :(基本要点简介)
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 :(很长,很深)
http://csharpindepth.com/Articles/Chapter6/IteratorBlockImplementation.aspx
Eric Lippert(我):(高级场景和角落案例)
http://blogs.msdn.com/b/ericlippert/archive/tags/iterators/
您的可枚举方法只会在您实际尝试访问成员后执行.
这称为" 延期执行 "(参见http://blogs.msdn.com/b/charlie/archive/2007/12/09/deferred-execution.aspx)
尝试实际访问返回的IEnumerable,或者只是调用;
var p = obj.ToPages().ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2979 次 |
| 最近记录: |