LINQ查询中无法访问的表达式代码

本文关键字:表达式 代码 访问 查询 LINQ | 更新日期: 2023-09-27 18:00:54

我正试图使用LINQ构建一个并行查询,以获取某个目录及其子目录中的所有文本文件和一个CSV文件。我希望将隐藏的、临时的和系统文件排除在查询考虑之外,以期加快查询速度。(目录很大。(当我在做的时候,我也想排除几个子目录。这是我的代码:

ParallelQuery<string> getFiles =
    Directory.EnumerateFiles(@"C:'", "*", SearchOption.AllDirectories)
    .AsParallel().Where(f => (
        FileAttributes.Hidden == 0 &&
        FileAttributes.System == 0 &&
        FileAttributes.Temporary == 0 &&
        !Path.GetDirectoryName(f).Contains("TempDir") &&
        !Path.GetDirectoryName(f).Contains("OtherDir") &&
        (Path.GetExtension(f).ToUpper() == ".TXT" ||
        Path.GetFileName(f) == "GoodFile.csv")));

我试着把这个问题的公认答案作为出发点。在Visual Studio(2013学习版桌面,如果重要的话(中,我在第7-9行得到了一个绿色下划线,这些行不包括certan子目录,并将结果限制为.txt文件,告诉我Unreachable expression code detected。但是,包含.csv文件的行似乎很好。执行查询不会返回任何结果,也不会引发任何异常。

我还是LINQ的新手,所以如果这里的问题明显,请原谅我。有人能解释一下吗?或者也许有更好的方法来解决这个问题?

LINQ查询中无法访问的表达式代码

FileAttributes.Hidden == 0 &&
FileAttributes.System == 0 &&
FileAttributes.Temporary == 0 &&

这是在测试枚举值是否为==0,而不是文件是否具有该属性。您需要创建System.IO.FileInfo的实例才能使用FileInfo.Attributes。您可以使用.Select(f => new System.IO.FileInfo(f))