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

Ale*_* A. 2 c# linq filesystems file-attributes

我正在尝试使用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")));
Run Code Online (Sandbox Code Playgroud)

我试着用这个问题的接受答案作为起点.在Visual Studio(2013 Express Desktop,如果它很重要)中,我在第7到第9行显示绿色下划线,不包括certan子目录,并将结果限制为.txt文件,告诉我Unreachable expression code detected.但是,包含.csv文件的行似乎没问题.执行查询不返回任何结果,也不会抛出任何异常.

我对LINQ仍然是非常非常新的所以请原谅我,如果这里的问题明显是显而易见的.任何人都可以对此有所了解吗?或许有更好的方法来解决这个问题?

Jon*_*n B 7

FileAttributes.Hidden == 0 &&
FileAttributes.System == 0 &&
FileAttributes.Temporary == 0 &&
Run Code Online (Sandbox Code Playgroud)

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