如何在c#中从搜索中排除数组

时间:2017-05-15 20:15:03

标签: c# arrays search

我是一个阵列。让我们说吧;

private string[] WhiteList =
     {
        "abcxyz.cs",
        "mouseapi.dll",
        "SensitivtyFix.asi",
        "drake.mp3"
     };

现在我想从目录/文件搜索中排除该数组。我如何实现这一目标?

对于此搜索,我使用另一个名为BlackList的数组,我可以从中获取所需的文件,但我无法从阵列白名单中排除文件。

for (int i = 0; i < GetSize; ++i)
        {
            foreach (var File in DirInf.GetFiles("*", SearchOption.AllDirectories))
            {
                if (File.FullName.Contains(Blacklist[i]) && !File.FullName.Contains(WhiteList[i]))

                {
                    listBox1.Items.Add("File: " + File.FullName);
                }
            }
        }

2 个答案:

答案 0 :(得分:0)

您需要的条件(与LINQ Where函数一起使用)是

Predicate<FileInfo> filter =
      f => Array.Exists(blackList, f.FullName.Contains) && 
             !Array.Exists(whiteList, f.FullName.Contains);

原始代码的问题在于它查看blackList[i]whiteList相同i,但匹配的列表索引可能不同。

现在您可以填写列表框:

foreach (var file in DirectoryInfo.GetFiles("*", SearchOption.AllDirectories).Where(filter))
    listBox1.Items.Add(file);

答案 1 :(得分:-1)

你需要

 if (BlackList.Contains(File.FullName) && !WHiteList.Contains(File.FullName)))

虽然这看起来很奇怪,因为你不能把白名单名称放在黑名单中。也许你需要||不是&amp;&amp;