尝试在调试中查看属性会在时间延迟后给出不同的计数。这是由于延迟执行吗?
Trying to view properties in debug gives different counts after time delay. Is this due to deferred execution?
我在 class 中有以下方法:
public IPlayerInfo GetPlayerInfo(int playerId)
{
return GetPlayerDetails(playerId).Matches; // Matches have Runs and Wickets list
}
我有一个 class 如下:
public class MyClass
{
public Lazy<IMyInterface> _service1;
public MyClass(Lazy<IMyInterface> service1)
{
_serivce1 = service1;
}
public void SomeMethod()
{
var runsList = _serivce1.GetPlayerInfo(1).Runs; // debugging this line of code
}
}
当我尝试调试上面的代码时,
- 我使用快速观察 (
Shift + F9
) 观察了 _serivce1.GetPlayerInfo(1)
的值。我展开了它的所有子节点。它的子节点之一是Runs
。我扩展了 Runs
。它显示 Expanding the Results View will enumerate the IEnumerable
。我列举了一下。它是空的。
- 我没有关闭调试
- 一段时间后,当我按下 shift + F9 并在快速观看中再次查看它时,它在我枚举 IEnumerable 后 添加了一个项目。魔法!
- 一段时间后,当我按下 shift + F9 并在快速观看中再次查看它时,它在我枚举 IEnumerable 之后添加了 第二项。幻方!!
- 然后,由于
_serivce1.GetPlayerInfo(1).Runs
添加了两项,而不是加载_serivce1.GetPlayerInfo(1)
和扩展子节点Runs
,我尝试直接调试_serivce1.GetPlayerInfo(1).Runs
但是它是空:(
当我 运行 没有调试时,_serivce1.GetPlayerInfo(1).Runs
(因此 runsList
)根本没有 itmes。如果这是由于延迟执行,请告诉我。另外,请告诉我解决方案。
这不是延迟执行,它只是以正常方式快速查看 运行ning 代码。
除了不使用 Quickview 或可能开始使用 OzCode 之外,这种类型的副作用没有 "solution",描述了他们如何规避至少某种副作用。
某处的某物将 Runs 加 1。当你执行 _serivce1.GetPlayerInfo(1)
.
时,这个东西是 运行
或者(1)找到这个地方,设置断点
或 (2) 在 GetPlayerInfo
.
中设置断点
然后在Immediate window.
中写? _serivce1.GetPlayerInfo(1)
与 Quickview 相反,Immediate window 触发断点。
执行 (1) 应该在您的断点处停止执行
而 (2) 允许您调试单步执行,直到找到添加的位置。
我在 class 中有以下方法:
public IPlayerInfo GetPlayerInfo(int playerId)
{
return GetPlayerDetails(playerId).Matches; // Matches have Runs and Wickets list
}
我有一个 class 如下:
public class MyClass
{
public Lazy<IMyInterface> _service1;
public MyClass(Lazy<IMyInterface> service1)
{
_serivce1 = service1;
}
public void SomeMethod()
{
var runsList = _serivce1.GetPlayerInfo(1).Runs; // debugging this line of code
}
}
当我尝试调试上面的代码时,
- 我使用快速观察 (
Shift + F9
) 观察了_serivce1.GetPlayerInfo(1)
的值。我展开了它的所有子节点。它的子节点之一是Runs
。我扩展了Runs
。它显示Expanding the Results View will enumerate the IEnumerable
。我列举了一下。它是空的。 - 我没有关闭调试
- 一段时间后,当我按下 shift + F9 并在快速观看中再次查看它时,它在我枚举 IEnumerable 后 添加了一个项目。魔法!
- 一段时间后,当我按下 shift + F9 并在快速观看中再次查看它时,它在我枚举 IEnumerable 之后添加了 第二项。幻方!!
- 然后,由于
_serivce1.GetPlayerInfo(1).Runs
添加了两项,而不是加载_serivce1.GetPlayerInfo(1)
和扩展子节点Runs
,我尝试直接调试_serivce1.GetPlayerInfo(1).Runs
但是它是空:(
当我 运行 没有调试时,_serivce1.GetPlayerInfo(1).Runs
(因此 runsList
)根本没有 itmes。如果这是由于延迟执行,请告诉我。另外,请告诉我解决方案。
这不是延迟执行,它只是以正常方式快速查看 运行ning 代码。
除了不使用 Quickview 或可能开始使用 OzCode 之外,这种类型的副作用没有 "solution",描述了他们如何规避至少某种副作用。
某处的某物将 Runs 加 1。当你执行 _serivce1.GetPlayerInfo(1)
.
或者(1)找到这个地方,设置断点
或 (2) 在 GetPlayerInfo
.
中设置断点
然后在Immediate window.
中写? _serivce1.GetPlayerInfo(1)
与 Quickview 相反,Immediate window 触发断点。
执行 (1) 应该在您的断点处停止执行
而 (2) 允许您调试单步执行,直到找到添加的位置。