为什么X
下面的方法没有被调用?!
static class Program { private static void Main() { X((IEnumerable)null); } public static IEnumerable X (IEnumerable e) { if (e == null) throw new ArgumentNullException(); yield break; } }
我试着踩到调试器但它没有进入X
!yield break
关键字是否会引起一些我不知道的副作用?
如果值得,我将使用Visual Studio 2008 Express和.NET 3.5 SP1.
X2是一个迭代器并被延迟执行.在您尝试从返回的IEnumerable实例中获取值之前,它不会实际运行.您可以通过将功能分为两部分来解决此问题,以获得您实际需要的行为.
public static IEnumerableX2 (IEnumerable e) { if (e == null) throw new ArgumentNullException(); return X2Helper(e); } private static IEnumerable X2Helper (IEnumerable e) { yield break; }
Eric在这个主题上有一篇很棒的博客文章:http://blogs.msdn.com/ericlippert/archive/2008/09/08/high-maintenance.aspx