我创建了复选框,用户可以将其设置为文件搜索:
现在我不知道如何在这段代码中使用这三种不同的布尔语句:
DirectoryInfo DirInfo = new DirectoryInfo(sCopyFilesFromFilePath);
GetDirsToCopy =
DirInfo.EnumerateDirectories(".", SearchOption.AllDirectories).Where( ? );
答案 0 :(得分:2)
您可以使用含义。逻辑a -> b
被翻译为!a || b
,因此:
DirInfo.EnumerateDirectories(".", SearchOption.AllDirectories)
.Where(x => !excludeSystem || (x.Attributes&FileAttributes.System) == 0);
.Where(x => !excludeHidden || (x.Attributes&FileAttributes.Hidden) == 0);
.Where(x => !excludeReadOnly || (x.Attributes&FileAttributes.ReadOnly) == 0);
我们假设excludeSystem
,excludeHidden
和excludeReadOnly
是您首先从复选框中提取的bool
。
你当然也可以用Where
写一个。{/ p>
解释(一个.Where
):
给出以下表达式
x => !excludeSystem || (x.Attributes&FileAttributes.System) == 0
您可以将其视为谓词。假设excludeSystem
为false
,则!excludeSystem
为true
,因此所有目录都会成功。如果不是,则执行第二个操作数(x.Attributes&FileAttributes.System) == 0
。
第一个操作数首先在&
的{{1}}和Attributes
上进行按位x
。如果FileAttributes.System
因此包含Attributes
,则结果将不同于零。在那种情况下,第二次测试失败。换句话说,如果文件被排除且文件是系统文件,则返回FileAttributes.System
。
<强>优化强>
如果你认为你会迭代数千个目录,你可以通过加快测试速度来提高代码效率:
false
这将(几乎)始终保持高效,但它会使代码变得不那么漂亮。