我這樣做,只是想知道如果Linq可以用來重寫這個,我是新來的?你可以將這個改寫成Linq嗎?
private void checkacrobat()
{
Process[] prs = Process.GetProcesses();
foreach(Process pr in prs)
{
if(pr.ProcessName == "****ProcessName")
pr.Kill();
}
}
我這樣做,只是想知道如果Linq可以用來重寫這個,我是新來的?你可以將這個改寫成Linq嗎?
private void checkacrobat()
{
Process[] prs = Process.GetProcesses();
foreach(Process pr in prs)
{
if(pr.ProcessName == "****ProcessName")
pr.Kill();
}
}
foreach(var process in Process.GetProcesses().Where(p=>p.ProcessName==whatever))
process.Kill();
記住,使用語句爲行動想殺人的過程。使用LINQ for 查詢,即讀取值而不更改它們。
但是你的代碼是完全可讀的,因爲它是。沒有很好的理由,我不會改變它。
在方法的語法:
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();
對於`Process.GetProcessesByName`,這可能是正確的做法。 – Brian 2010-11-29 14:40:45
注意,LINQ是用於查詢,投影和聚集。你在這裏做了一些副作用,而LINQ並不適合這個。所以,我將查詢部分從側面效果部分分開。
private void KillProcessesWithName(string processName) {
var processesToKill = Process.GetProcesses()
.Where(p => p.ProcessName == processName);
foreach(var process in processesToKill) {
process.Kill();
}
}
LINQified版本是否更好,我會保留原樣是有爭議的。
的IEnumerable沒有一個foreach擴展方法,所以你不能完全把它改寫爲LINQ(除非你用你自己的ForEach擴展)
Process[] processes in Process.GetProcesses();
foreach(Process pr in processes.Where(p => p.ProcessName == "****ProcessName"))
{
pr.Kill();
}
使用`ForEach`擴展名重寫以獲得副作用將是邪惡的。 – jason 2010-11-27 15:16:34
var processes = from process in Process.GetProceeses()
where process.ProcessName == "****ProcessName"
select process;
foreach(var p in processes){
p.Kill()
}
我認爲,列表中包含了一個ForEach-您可以使用的擴展名。
Process.GetProcesses().Where(p=>p.ProcessName==whatever).ToList().ForEach(y => y.Kill);
我希望我能接受所有的答案!這只是我試圖讓我的頭腦圍繞一個真實世界(對我而言)的例子。我正在將腳趾浸入Linq的水中!謝謝埃裏克我喜歡你答案的簡單。感謝Ani爲「特製的方法」,我將在我的代碼中使用它。以及我認爲我從他們身上學到很多東西的所有其他答案。 – RTFS 2010-11-27 15:28:25