我对linq几乎一无所知。Linq to objects - 选择第一个对象
我这样做:
var apps = from app in Process.GetProcesses()
where app.ProcessName.Contains("MyAppName") && app.MainWindowHandle != IntPtr.Zero
select app;
这让我匹配标准将所有正在运行的进程。
但我不知道如何得到第一个。我可以在网络上找到的例子似乎意味着我必须这样做
var matchedApp = (from app in Process.GetProcesses()
where app.ProcessName.Contains("MyAppName") && app.MainWindowHandle != IntPtr.Zero
select app).First();
这令我有点丑陋,也抛出一个异常,如果没有匹配的过程。有没有更好的办法?
UPDATE
实际上,我试图找到第一个匹配项,并呼吁它SetForegroundWindow
我想出了这个解决方案,这也令我丑陋和可怕
,但比上面好。有任何想法吗?
var unused = from app in Process.GetProcesses()
where app.ProcessName.Contains("MyAppName") && app.MainWindowHandle != IntPtr.Zero
select SetForegroundWindow(app.MainWindowHandle); // side-effects in linq-query is technically bad I guess
如何将它作为查询而不是扩展方法? – 2010-03-25 10:48:54