我正在这样做,我只是想知道,如果Linq可以用来重写这个,我对这一切都是新手吗?
private void checkacrobat()
{
Process[] prs = Process.GetProcesses();
foreach(Process pr in prs)
{
if(pr.ProcessName == "****ProcessName")
pr.Kill();
}
}
答案 0 :(得分:7)
foreach(var process in Process.GetProcesses().Where(p=>p.ProcessName==whatever))
process.Kill();
请记住,将语句用于操作,例如终止进程。使用LINQ进行查询,读取值而不更改它们。
但是你的代码完全可读。没有充分的理由我不会改变它。
答案 1 :(得分:5)
方法语法:
var processesToBeKilled = Process.GetProcesses()
.Where(pr => pr.ProcessName == "****ProcessName");
foreach(var process in processesToBeKilled)
process.Kill();
在查询语法中:
var processesToBeKilled = from pr in Process.GetProcesses()
where pr.ProcessName == "****ProcessName"
select pr;
foreach(var process in processesToBeKilled)
process.Kill();
专用方法:
这里真的不需要LINQ;已经有了方便的Process.GetProcessesByName
方法:
var processesToBeKilled = Process.GetProcessesByName("****ProcessName");
foreach(var process in processesToBeKilled)
process.Kill();
答案 2 :(得分:2)
请注意,LINQ用于查询,投影和聚合。你正在做一些有副作用的事情,而LINQ并不适合。因此,我将查询部分与副作用部分分开。
private void KillProcessesWithName(string processName) {
var processesToKill = Process.GetProcesses()
.Where(p => p.ProcessName == processName);
foreach(var process in processesToKill) {
process.Kill();
}
}
LINQified版本是否更好是有争议的,我会保持原样。
答案 3 :(得分:1)
IEnumerable没有ForEach扩展方法,因此您无法将其完全重写为LINQ(除非您使用自己的ForEach扩展)
Process[] processes in Process.GetProcesses();
foreach(Process pr in processes.Where(p => p.ProcessName == "****ProcessName"))
{
pr.Kill();
}
答案 4 :(得分:1)
var processes = from process in Process.GetProceeses()
where process.ProcessName == "****ProcessName"
select process;
foreach(var p in processes){
p.Kill()
}
答案 5 :(得分:1)
我认为List有一个你可以使用的ForEach扩展。
Process.GetProcesses().Where(p=>p.ProcessName==whatever).ToList().ForEach(y => y.Kill);