是否有可能在调试时"看到"C#foreach循环的迭代集合?

dev*_*os1 4 c# debugging foreach visual-studio-2010 visual-studio

这是我经常希望在调试时能够做的事情.如果我有一行代码来计算foreach循环标题内的集合:

foreach ( var item in someObject.GetItems( someParameter ) ) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

似乎没有任何东西可以悬停以获取返回的计算项集GetItems,即使它已经清楚地计算并返回以便循环能够执行.

看起来好像很方便.我错过了什么吗?这是一个痛苦不得不重写代码列表存储在一个变量只是这样我就可以看到它在调试时,尤其是当我发现一个错误,不容易复制.

Ree*_*sey 9

一种选择是在循环之前将其分配给临时变量.

var items = someObject.GetItems( someParameter );
foreach ( var item in items ) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

这将允许您items直接检查.

即使它已经清楚地计算并返回,以便循环能够执行.

问题是这不是真的.

如果GetItemsIEnumerableIEnumerable<T>,则可能无法进行评估.事实上,"集合"可以是无限的可枚举.


Jar*_*Par 2

一种方法是将以下表达式添加到监视窗口

someObject.GetItems(someParameter);
Run Code Online (Sandbox Code Playgroud)

悬停在这种情况下不起作用,但将其显式添加到监视窗口将起作用。在悬停期间计算表达式的代码中需要非常小心,而不是计算函数。逻辑是函数很昂贵,可能会导致 IDE 死锁,我们不希望悬停操作导致死锁。该表达式的部分GetItems是函数求值,因此 EE 拒绝对其求值。