运行以下代码时:
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循环并且永远不会进入它。
我迷失在这里。为什么我的代码跳回一行?我尝试了Enumerate和GetFiles,似乎没有工作。
答案 0 :(得分:0)
代码“跳回”的原因是Deferred Execution。在foreach循环中使用结果之前,您所拥有的LINQ表达式实际上并未执行。
至于跳过foreach循环 - 这是因为枚举为空。正如@Slai在评论中提到的那样,您的扩展名列表可能存在问题(在扩展名称之前忘记'。'是一个常见的错误。)
如果您希望枚举立即执行而不是延迟执行(使调试更容易),最简单的方法就是使用.ToList()结束您的LINQ表达式,如下所示:
var files = dir.EnumerateFiles("*.*", SearchOption.AllDirectories)
.Where(f => ext.Contains(Path.GetExtension(f.FullName)))
.ToList();