【问题标题】:How do I check if a member of an array matches any member of another array using Linq?如何使用 Linq 检查数组的成员是否与另一个数组的任何成员匹配?
【发布时间】:2014-07-17 10:17:35
【问题描述】:

我需要不断检查多个进程中的一个是否正在运行。到目前为止我用过:

Process[] Processes = Process.GetProcesses();

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

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

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

【问题讨论】:

    标签: c# linq


    【解决方案1】:

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

    var processNames = new HashSet<string>(Processes.Select(p => p.ProcessName));
    bool isExists = ProcessesToCheck.Any(processNames.Contains);
    

    【讨论】:

    • processNames.Contains 是什么意思??
    • @neel 它是一个方法组。 ProcessesToCheck.Any(x =&gt; processNames.Contains(x));的简写
    • ...它实际上是一个扩展方法System.Linq.Enumerable.Contains(processNames, x),但它仍然可以使用方法组语法。 编辑:processNames 的类型为HashSet&lt;string&gt; 时,这是一个普通的实例方法。我以为你输入了string[] ...
    【解决方案2】:

    你可以试试这样的:

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

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

    有关Any的更多信息,请查看here,有关Contains的更多信息,请查看here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      • 2014-03-08
      • 2021-01-24
      • 1970-01-01
      • 2020-01-28
      • 2022-11-22
      相关资源
      最近更新 更多