C# 如何在lambda表达式或linq中编写以下代码?
我只是想知道如何用lambda表达式或linq编写以下代码。如果你知道,请回答C# 如何在lambda表达式或linq中编写以下代码?,c#,linq,lambda,C#,Linq,Lambda,我只是想知道如何用lambda表达式或linq编写以下代码。如果你知道,请回答 Process[] runingProcess = Process.GetProcesses(); ManagementObjectCollection moReturn; ManagementObjectSearcher moSearch; void func() {
Process[] runingProcess = Process.GetProcesses();
ManagementObjectCollection moReturn;
ManagementObjectSearcher moSearch;
void func()
{
moSearch = new ManagementObjectSearcher("Select * from Win32_Product");
moReturn = moSearch.Get();
foreach (ManagementObject mo in moReturn)
{
foreach (var process in Process.GetProcessesByName(mo["Name"].ToString()))
{
process.Kill();
}
}
}
这是迭代零件的LINQ等价物:
moReturn.Cast<ManagementBaseObject>().ToList().ForEach(mo => Process.GetProcessesByName(mo["Name"].ToString()).ToList().ForEach(proc => proc.Kill()));
moReturn.Cast().ToList().ForEach(mo=>Process.getProcessByName(mo[“Name”].ToString()).ToList().ForEach(proc=>proc.Kill());
编辑:这个答案在语义上等同于OP问题中的迭代,但它没有得到任何东西。通过使用
SelectMany
而不是ForEach
,将过程展平,查看其他更合适的上浮答案。这是LINQ等价于迭代部分:
moReturn.Cast<ManagementBaseObject>().ToList().ForEach(mo => Process.GetProcessesByName(mo["Name"].ToString()).ToList().ForEach(proc => proc.Kill()));
moReturn.Cast().ToList().ForEach(mo=>Process.getProcessByName(mo[“Name”].ToString()).ToList().ForEach(proc=>proc.Kill());
编辑:这个答案在语义上等同于OP问题中的迭代,但它没有得到任何东西。使用SelectMany
扁平化进程
而不是ForEach
使用SelectMany扁平化进程,查看其他更合适的上浮答案
var moSearch = new ManagementObjectSearcher("Select * from Win32_Product");
var moReturn = moSearch.Get();
var processes = moReturn.Cast<ManagementObject>()
.SelectMany (mo => Process.GetProcessesByName(mo["Name"].ToString()))
.ToList();
processes.ForEach(p=> p.Kill() );
var moSearch=新的ManagementObjectSearcher(“从Win32_产品中选择*);
var moReturn=moSearch.Get();
var processs=moReturn.Cast()
.SelectMany(mo=>Process.getProcessByName(mo[“Name”].ToString())
.ToList();
processs.ForEach(p=>p.Kill());
或使用查询语法
var moSearch = new ManagementObjectSearcher("Select * from Win32_Product");
var moReturn = moSearch.Get();
var processes = (from mo in moReturn.Cast<ManagementObject>()
from prc in Process.GetProcessesByName(mo["Name"].ToString())
select prc).ToList();
processes.ForEach(p=> p.Kill() );
var moSearch=新的ManagementObjectSearcher(“从Win32_产品中选择*);
var moReturn=moSearch.Get();
var进程=(来自moReturn.Cast()中的mo)
来自prc in Process.GetProcessByName(mo[“Name”].ToString())
选择prc).ToList();
processs.ForEach(p=>p.Kill());
使用选择多个来展平流程
var moSearch = new ManagementObjectSearcher("Select * from Win32_Product");
var moReturn = moSearch.Get();
var processes = moReturn.Cast<ManagementObject>()
.SelectMany (mo => Process.GetProcessesByName(mo["Name"].ToString()))
.ToList();
processes.ForEach(p=> p.Kill() );
var moSearch=新的ManagementObjectSearcher(“从Win32_产品中选择*);
var moReturn=moSearch.Get();
var processs=moReturn.Cast()
.SelectMany(mo=>Process.getProcessByName(mo[“Name”].ToString())
.ToList();
processs.ForEach(p=>p.Kill());
或使用查询语法
var moSearch = new ManagementObjectSearcher("Select * from Win32_Product");
var moReturn = moSearch.Get();
var processes = (from mo in moReturn.Cast<ManagementObject>()
from prc in Process.GetProcessesByName(mo["Name"].ToString())
select prc).ToList();
processes.ForEach(p=> p.Kill() );
var moSearch=新的ManagementObjectSearcher(“从Win32_产品中选择*);
var moReturn=moSearch.Get();
var进程=(来自moReturn.Cast()中的mo)
来自prc in Process.GetProcessByName(mo[“Name”].ToString())
选择prc).ToList();
processs.ForEach(p=>p.Kill());
< /代码> 不同于其他答案,我考虑使用<代码>。使用这些关键字后,LINQ查询将结束。尤其是.ForEach()
,因为.ForEach(…)
的目的是为了,而LINQ是为了查询
我的版本是:
// Query for processes to kill
var data = new ManagementObjectSearcher("Select * from Win32_Product")
.Get()
.Cast<ManagementObject>()
.SelectMany(mo => Process.GetProcessesByName(mo["Name"].ToString()));
// Kill the processes
foreach (var item in data) {
item.Kill();
}
//查询要终止的进程
var数据=新的ManagementObjectSearcher(“从Win32_产品中选择*)
.Get()
.Cast()
.SelectMany(mo=>Process.getProcessByName(mo[“Name”].ToString());
//终止进程
foreach(数据中的var项){
item.Kill();
}
< /代码> 不同于其他答案,我考虑使用<代码>。一旦使用这些关键字,LINQ查询就结束了。尤其是.ForEach()
,因为.ForEach(…)
的目的是为了,而LINQ是为了查询
我的版本是:
// Query for processes to kill
var data = new ManagementObjectSearcher("Select * from Win32_Product")
.Get()
.Cast<ManagementObject>()
.SelectMany(mo => Process.GetProcessesByName(mo["Name"].ToString()));
// Kill the processes
foreach (var item in data) {
item.Kill();
}
//查询要终止的进程
var数据=新的ManagementObjectSearcher(“从Win32_产品中选择*)
.Get()
.Cast()
.SelectMany(mo=>Process.getProcessByName(mo[“Name”].ToString());
//终止进程
foreach(数据中的var项){
item.Kill();
}
您在同一台计算机上尝试过的任何代码片段?是fujiFX.var pro=Process.getProcesss()。其中(i=>(i.ProcessName!=“lmc”);foreach(var prc in pro){prc.Kill();}您是否有调用func
的代码示例?lambda express只需删除函数名并将其转换为匿名函数。因此,您可以调用myobj.Method(func);
而不是调用myobj.Method(()=>{/*此处的函数体…*/})
我只希望这样@fujiFX。这只是一个友好的提示,您可能想阅读本页:这样您就可以始终确保您的问题易于回答,并且尽可能清楚。请确保包括您为解决问题所做的任何努力,以及在尝试这些修复时发生的情况。另外,不要忘记您的建议w代码和任何错误消息!是否有您在同一程序上尝试过的代码片段?是fujiFX.var pro=Process.getProcesss()。其中(i=>(i.ProcessName!=“lmc”);foreach(var prc in pro){prc.Kill();}您是否有调用func
的代码示例?lambda express只需删除函数名并将其转换为匿名函数。因此,您可以调用myobj.Method(func);
而不是调用myobj.Method(()=>{/*此处的函数体…*/})
我只希望这样@fujiFX。这只是一个友好的提示,您可能想阅读本页:这样您就可以始终确保您的问题易于回答,并且尽可能清楚。请确保包括您为解决问题所做的任何努力,以及在尝试这些修复时发生的情况。另外,不要忘记您的建议w代码和任何错误消息!谢谢@hendry,但它显示的错误(如managemant对象集合)不包含Tolist@chinnathambir我的错,应该先投。请看编辑后的答案。它可能看起来像LINQ,闻起来像LINQ,但使用.ToList().ForEach()<