我总是得到这句话"扩展结果视图将枚举IEnumerable"在调试并尝试查看本地数组中的内容时。 我正在使用Visual Studio 2013进行Web和C#编码。 如何查看我的数据?
答案 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中使用之前填充的查询内容。