调试时无法进入迭代器块(C#)

我正在尝试调试从unit testing项目执行的代码,但是当我尝试进入某个方法时,它只是直接进入下一行,并且该方法内的断点未被命中。 该方法位于一个不同项目的类中,但所有代码都是在调试模式下构建的,我尝试过清理和重建解决方案,没有任何乐趣。

但是,这只是因为我在方法中添加了一个迭代器块。 当我删除它并重建时,我可以介入。 奇怪的?

我正在使用Visual Studio 2010 Beta 1,这可能只是一个错误吗?

迭代器块使用延迟执行 – 意思是:在您实际开始迭代数据之前,不会执行任何操作。

那么:数据是否经过迭代? 有什么东西在价值观上循环吗? 如果需要添加尽早运行的validation逻辑,则目前需要两种方法:

public static IEnumerable GetNumbers(int from, int to) { // this validation runs ASAP (not deferred) if (to < from) throw new ArgumentOutOfRangeException("to"); return GetNumbersCore(from, to); } private static IEnumerable GetNumbersCore(int from, int to) { // this is all deferred while (from <= to) { yield return from++; } } 

马克是对的。 该方法被延迟执行,在迭代器实际执行之前,您无法进入该方法。

当我需要在unit testing中调试迭代器块时,我会执行以下操作。 假设该方法称为GetStuff。

 [TestMethod] public void TestGetStuff() { var obj = GetStuffObje(); var list = obj.GetStuff().ToList(); } 

.ToList()调用将强制迭代器执行完成。 然后我在GetStuff方法中设置一个断点并启动一个调试会话