运行以下代码时:
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,似乎都没有用。
发布于 2017-06-22 20:19:29
代码“跳回去”的原因是一些叫做延迟执行的东西。只有在foreach循环中使用结果后,才实际执行那里的LINQ表达式。
至于跳过foreach循环,这是因为枚举是空的。正如@Slai在评论中提到的那样,您的扩展列表可能会出现问题(忘记“.”)。在扩展名之前是一个常见的错误)。
如果希望立即执行枚举,而不是延迟(使调试更容易),最简单的方法就是使用.ToList()结束LINQ表达式,如下所示:
var files = dir.EnumerateFiles("*.*", SearchOption.AllDirectories)
.Where(f => ext.Contains(Path.GetExtension(f.FullName)))
.ToList();https://stackoverflow.com/questions/44708408
复制相似问题