【发布时间】:2010-09-05 16:04:33
【问题描述】:
我对 linq 几乎一无所知。
我正在这样做:
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();
这让我觉得有些难看,如果没有匹配的进程也会抛出异常。有没有更好的办法?
更新
我实际上是在尝试找到第一个匹配的项目,并在上面调用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
【问题讨论】:
标签: c# linq linq-to-objects