【发布时间】:2015-09-28 16:40:37
【问题描述】:
在更高版本的 .NET 中,有一种简洁的方法可以检查名称遵循某种模式的文件的数量或存在。
private int HowManyDonkeys(string path)
{
return Directory.EnumerateFiles(path, "*donkey*");
}
private bool AreThereAnyDonkeys(string path)
{
return Directory.EnumerateFiles(path, "*donkey*").Any();
}
但是,我想知道如何扭转它并列出不是驴的文件。一种方法是列出所有并减去不需要的数量,但它不是那么整洁。另一种方法是使用 LINQ 并像这样进行。
Directory.EnumerateFiles(path, "*")
.Count(name => name.Contains("anti-donkey"));
Directory.EnumerateFiles(path, "*")
.Any(name => name.Contains("anti-donkey"));
有没有更好的方法(即让我指定模式的过滤条件作为输入的对立面?
【问题讨论】:
-
@Sybren 我可以使用 Any() 和 Count,如示例所示,这消除了执行 Where() 的意义 首先。但这不是问题 - 我想知道是否可以在枚举方法中指定反模式。
-
@Kondrad Viltersten 使用
!运算符 -
EnumerateFiles只允许简单的 DOS 搜索(* 和?),没有正则表达式。 -
@Sybren 你能举例说明如何使用否定运算符吗?另外,请注意我对 LINQ 部分的评论。
-
为什么要在没有
LINQ的情况下这样做?