Ich habe diese Funktion:Kann IEnumerable.Select() ein Element überspringen?
public IEnumerable<string> EnumPrograms() {
return dev.AudioSessionManager2.Sessions.AsEnumerable()
.Where(s => s.GetProcessID != 0)
.Select(s => {
try {
return Process.GetProcessById((int)s.GetProcessID).ProcessName;
}
catch (ArgumentException) {
return null;
}
});
}
Die try..catch notwendig ist, da kann es Sitzungen mit einem PID, die nicht mehr existiert. Ich würde sie gerne überspringen. Gibt es eine Möglichkeit, dies vom Rückruf Select
zu tun, oder muss ich eine neue Where
Bedingung hinzufügen, die null
Werte überspringt?
Dieser zweite Vorschlag klingt interessant. Aber die Prozesse mit Audio-Sessions sind nur eine kleine Teilmenge der laufenden Prozesse, also denke ich, es wäre etwas weniger effizient (nicht, dass es in diesem Fall wichtig ist)? – ThiefMaster
@ThiefMaster: Ich weiß nicht, wie lange 'Process.GetProcesses()' dauert, aber zumindest würden Sie es nur * einmal * anstatt einmal pro Sitzung aufrufen. –
@ThiefMaster Ich bin mir ziemlich sicher, dass 'GetProcesses' und' GetProcessByID' 'EnumProcesses' unter der Haube aufrufen. – Rotem