如何使用Linq检查数组的成员是否与另一个数组的成员匹配?

时间:2014-07-17 10:17:36

标签: c# linq

我需要不断检查是否有多个进程正在运行。到目前为止,我已经使用过:

Process[] Processes = Process.GetProcesses();

获取当前正在运行的进程。我有一个字符串数组,其中包含我想要确保在继续之前没有运行的进程列表:

string[] ProcessesToCheck = new string[] {"Chartvue",
        "collvue"
        ,"damage"
        ,"Datagen"
        ,"datagenlegacy"
        ,"FAST_SACS"
        ,"hullmesher"
        ,"hullmodeler"
        ,"ifatigue"};

问题是,如何检查Processes的所有ProcessName成员是否都不包含ProcessesToCheck的任何成员?

2 个答案:

答案 0 :(得分:3)

您可以将进程名称放入哈希集(以便更快地查找),然后使用Any方法检查ProcessesToCheck

中是否存在任何进程名称
var processNames = new HashSet<string>(Processes.Select(p => p.ProcessName));
bool isExists = ProcessesToCheck.Any(processNames.Contains);

答案 1 :(得分:2)

您可以尝试这样的事情:

var isExists = Processes.Any(x => ProcessesToCheck.Contains(x.ProcessName));

在上面的代码中,我们使用方法Any来查看数组Processes中是否至少存在一个进程,其名为ProcessName的属性包含在名为{{的数组中1}}。

有关ProcessesToCheck的详情,请查看here,有关Any的更多信息,请查看here