首页 > 解决方案 > 如何解释 IEnumerable.Where() 子句的这种难以理解的结果?

问题描述

我有以下测试代码:

var ext = ".xml";
var xmlFiles = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Where(s => ext.Equals(Path.GetExtension(s)));
var xmlFiles2 = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);
var xmlFiles3 = xmlFiles2.Where(s => ext.Equals(Path.GetExtension(s)));

path在这种情况下会导致一个包含一个 XML 文件的文件夹。设置断点会产生以下结果:

编辑

根据要求,这里是监视窗口的屏幕截图。

重新评估前

在此处输入图像描述

重新评估后

在此处输入图像描述

标签: c#ienumerable

解决方案


监视窗口实际上并没有显示,xmlFiles并且xmlFiles3是空的。这表明它们尚未被枚举。在这种情况下,监视窗口不会显示任何值(因为无法知道迭代器将产生什么),只有消息“扩展结果视图将枚举 IEnumerable”。

要显示 IEnumerable 提供的值,只需展开“结果视图”即可。

在代码中,您将通过访问它的值来强制枚举,IEnumerable通常通过在 a 中迭代它foreach或调用ToArray()orToList()来访问它。


推荐阅读