首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetFiles和EnumerateFiles跳过foreach循环

GetFiles和EnumerateFiles跳过foreach循环
EN

Stack Overflow用户
提问于 2017-06-22 20:02:19
回答 1查看 780关注 0票数 0

运行以下代码时:

代码语言:javascript
复制
var files = dir.EnumerateFiles("*.*",
    SearchOption.AllDirectories).Where(f => ext.Contains(Path.GetExtension(f.FullName)))
foreach (FileInfo file in files)
  {
    file.CopyTo(destPath, true);
  }

其中dir是DirectoryInfo

其中ext是包含可接受文件扩展名的字符串列表。

到达foreach循环时,文件为null。

在foreach内部( in语句处),程序跳回=>语句,然后填充文件。当它完成时,它跳过foreach循环,永远不会进入它。

我在这里迷路了。为什么我的代码要跳回一行呢?我尝试过枚举和GetFiles,似乎都没有用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-22 20:19:29

代码“跳回去”的原因是一些叫做延迟执行的东西。只有在foreach循环中使用结果后,才实际执行那里的LINQ表达式。

至于跳过foreach循环,这是因为枚举是空的。正如@Slai在评论中提到的那样,您的扩展列表可能会出现问题(忘记“.”)。在扩展名之前是一个常见的错误)。

如果希望立即执行枚举,而不是延迟(使调试更容易),最简单的方法就是使用.ToList()结束LINQ表达式,如下所示:

代码语言:javascript
复制
var files = dir.EnumerateFiles("*.*", SearchOption.AllDirectories)
    .Where(f => ext.Contains(Path.GetExtension(f.FullName)))
    .ToList();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44708408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档