我在XML文件中有一个进程名列表,正在尝试将它们与本地计算机上当前正在运行的进程进行比较。我已经成功地在foreach循环中实现了它,但是理想情况下,我希望在Linq中执行它,因为我的代码越来越拥挤。我不能完全正确地语法...

XDocument xdoc; // this is populated elsewhere
Process[] allProcesses = Process.GetProcesses();

if (allProcesses.Any(_ => xdoc.Descendants("Process").ToList().Contains(_)) {}


我认为这是因为我需要以某种方式使用allProcesses.ProcessName.Any作为比较,但是ProcessName不会暴露自己的自我,除非我在整个过程中执行一个foreach循环。

最佳答案

您必须比较进程的名称。


从xml获取进程名称列表(取决于您的xml结构:xdoc.Descendants("Process").Select(x=>x.Value).ToList()
Process名称(process.ProcessName)比较


所以看起来可能像这样:

XDocument xdoc; // this is populated elsewhere

var processList = xdoc.Descendants("Process").Select(x=>x.Value).ToList();
Process[] allProcesses = Process.GetProcesses();

if (allProcesses.Any(p => processList.Contains(p.ProcessName)) {}

10-05 21:30