Cha*_*lie 8 c# debugging iterator visual-studio-2010
我正在尝试调试从单元测试项目执行的代码,但是当我尝试进入某个方法时,它只是直接进入下一行,并且该方法内的断点未被命中.该方法位于一个不同项目的类中,但所有代码都是在调试模式下构建的,我尝试过清理和重建解决方案,没有任何乐趣.
但是,这只是因为我在方法中添加了一个迭代器块.当我删除它并重建时,我可以介入.奇怪的?
我正在使用Visual Studio 2010 Beta 1,这可能只是一个错误吗?
Mar*_*ell 12
迭代器块使用延迟执行 - 意思是:在实际开始迭代数据之前,不会执行任何操作.
那么:数据是否经过迭代?有什么东西在价值观上循环吗?如果需要添加尽早运行的验证逻辑,则目前需要两种方法:
public static IEnumerable<int> 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<int> GetNumbersCore(int from, int to) {
// this is all deferred
while (from <= to) {
yield return from++;
}
}
Run Code Online (Sandbox Code Playgroud)
马克是对的.该方法是延迟执行的,在迭代器实际执行之前,您无法进入该方法.
当我需要在单元测试中调试迭代器块时,我会执行以下操作.假设该方法称为GetStuff.
[TestMethod]
public void TestGetStuff() {
var obj = GetStuffObje();
var list = obj.GetStuff().ToList();
}
Run Code Online (Sandbox Code Playgroud)
.ToList()调用将强制迭代器执行完成.然后我在GetStuff方法中设置一个断点并启动一个调试会话
归档时间: |
|
查看次数: |
1915 次 |
最近记录: |