如何在调试期间查看数据?

时间:2014-08-20 14:53:08

标签: c# visual-studio ienumerable

我总是得到这句话"扩展结果视图将枚举IEnumerable"在调试并尝试查看本地数组中的内容时。 我正在使用Visual Studio 2013进行Web和C#编码。 如何查看我的数据?

1 个答案:

答案 0 :(得分:0)

C#中的可枚举符合deferred execution,因此,如果您有一个仅被分配但尚未使用的Enumerable对象,那么您将遇到"扩展结果视图&# 34;调试时发出消息。

这是一个简单的例子来帮助说明

string[] myArr = { "one", "two", "" };
var query = myArr.Where(x => !String.IsNullOrEmpty(x));
foreach(var q in query)
{
    Console.WriteLine(q);
}

在此示例中,在foreach上设置断点并在调试器中检查query的值将为您提供您要引用的消息 - 这是因为.Where的执行已经推迟到集合实际枚举之前。 幸运的是,我们将在下一行中发生,因为foreach将遍历集合,导致.Where执行。

但是你可能会发现有些情况下集合直到很久才被枚举 - 我相信这是延迟执行的好处之一,因为它允许在运行时感知性能(尤其是在大型运行时)采集)。 一个简短的例子可能是用户可以访问应用程序中的页面,其中包含很少使用的包含大量对象的下拉列表。通过枚举大型对象集合而不是让下拉列表减慢对该页面的加载,而是更好地推迟该枚举,直到页面加载并且用户决定使用下拉列表来查看集合(他们可能永远不会做!)。

但是,您可以强制执行立即执行,而不是等待枚举数组,您只需在查询中调用.ToArray().ToList()

var query = myArr.Where(x => !String.IsNullOrEmpty(x)).ToArray();

现在,当您进行调试时,您将看到在foreach中使用之前填充的查询内容。