在调试过程中如何查看数据
本文关键字:何查看 数据 过程中 调试 | 更新日期: 2023-09-27 18:18:54
我总是得到注释"扩展结果视图将枚举IEnumerable",而调试并试图查看什么是在我的本地数组。我正在使用Visual Studio 2013进行Web和c#编码。我如何查看我的数据?
c#中的Enumerable是延迟执行的,所以如果你有一个Enumerable对象,它只被分配了,但还没有使用,那么在调试时你会遇到"正在扩展结果视图"的消息。
这里有一个简单的例子来帮助说明
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中使用之前被填充。