No sé casi nada sobre linq.Linq a los objetos: seleccione el primer objeto
que estoy haciendo esto:
var apps = from app in Process.GetProcesses()
where app.ProcessName.Contains("MyAppName") && app.MainWindowHandle != IntPtr.Zero
select app;
Lo cual me lleva todos los procesos en ejecución que coinciden con ese criterio.
Pero no sé cómo obtener la primera. Los ejemplos que puedo encontrar en la red parece dar a entender que tengo que hacer esto
var matchedApp = (from app in Process.GetProcesses()
where app.ProcessName.Contains("MyAppName") && app.MainWindowHandle != IntPtr.Zero
select app).First();
que me parece un poco feo, y también produce una excepción si no hay procesos de casación. ¿Hay una mejor manera?
ACTUALIZACIÓN
realidad estoy tratando de encontrar el primer elemento coincidente, y llamar a SetForegroundWindow
en él
Yo he llegado con esta solución, que también me parece feo y horrible, pero mejor que arriba ¿Algunas ideas?
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ómo lo pones como una consulta y no como un método de extensión? –
@Quintin no existe una sintaxis de "palabra clave" para FirstOrDefault: debe usar el método de extensión. –
Bueno, podrías usar '(query) .FirstOrDefault()' pero el método de extensión de sentax es más fácil de leer imo –