Я почти ничего не знаю о 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