Ich weiß fast nichts über linq.Linq zu Objekten - wählen Sie das erste Objekt
Ich tue dies:
var apps = from app in Process.GetProcesses()
where app.ProcessName.Contains("MyAppName") && app.MainWindowHandle != IntPtr.Zero
select app;
Was mich alle laufenden Prozesse wird die die Kriterien erfüllen.
Aber ich weiß nicht, wie man das erste bekommt. Die Beispiele, die ich im Netz finden kann scheinen zu implizieren ich diese
var matchedApp = (from app in Process.GetProcesses()
where app.ProcessName.Contains("MyAppName") && app.MainWindowHandle != IntPtr.Zero
select app).First();
zu tun haben, die mich als etwas hässlich trifft, und wirft auch eine Ausnahme, wenn es keine passenden Prozesse sind. Gibt es einen besseren Weg?
UPDATE
ich tatsächlich das erste passende Element zu finden versuchen, und rufen SetForegroundWindow
darauf
ich mit dieser Lösung zu kommen haben, die als hässlich und schrecklich erscheint mir auch, aber besser als oben. Irgendwelche Ideen?
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
Wie Sie das als eine Abfrage und nicht eine Erweiterungsmethode? –
@Quintin gibt es keine "Schlüsselwort" -Syntax für FirstOrDefault - Sie müssen die Erweiterungsmethode verwenden. –
Nun, Sie könnten '(query) .FirstOrDefault()' aber die Erweiterungsmethode sentax ist einfacher zu lesen imo –