当我尝试获取进程名称时,在目标进程运行时它可以很好地工作。但是,如果[System.IndexOutOfRangeException] 目标进程未运行。
public Int32 GetProcessId(String proc)
{
Process[] ProcList;
ProcList = Process.GetProcessesByName(proc);
return ProcList[0].Id;
}
是返回错误吗?
答案 0 :(得分:2)
很可能没有正在使用正在用作过滤器的字符串的运行进程。然后调用返回一个空数组。
您无法从空数组中获取数组元素0,这就是为什么您会收到此异常的原因。
您不能/不应该从这样的方法中返回Int32
,因为它有可能会返回一个空数组,例如0
将是错误的结果。建议您将返回值更改为Int32?
(可空整数)并返回:
return ProcList.FirstOrDefault()?.Id;
P.S。除非您希望发生异常,否则您很可能不会这样做,并且无论如何,让异常控制您的流程不是一个好主意。
答案 1 :(得分:0)
如果进程未在运行,它将没有关联的PID,因此ProcList []将为空。然后,当您在return语句中访问它时,它会引发异常,因为该数组中没有任何内容。