获取processid时出现错误IndexOutOfRange

时间:2019-03-28 11:36:14

标签: c#

当我尝试获取进程名称时,在目标进程运行时它可以很好地工作。但是,如果[System.IndexOutOfRangeException]  目标进程未运行。

    public Int32 GetProcessId(String proc)
    {

        Process[] ProcList;
        ProcList = Process.GetProcessesByName(proc);

        return ProcList[0].Id;

    }

是返回错误吗?

2 个答案:

答案 0 :(得分:2)

很可能没有正在使用正在用作过滤器的字符串的运行进程。然后调用返回一个空数组。

您无法从空数组中获取数组元素0,这就是为什么您会收到此异常的原因。

您不能/不应该从这样的方法中返回Int32,因为它有可能会返回一个空数组,例如0将是错误的结果。建议您将返回值更改为Int32?(可空整数)并返回:

return ProcList.FirstOrDefault()?.Id;

P.S。除非您希望发生异常,否则您很可能不会这样做,并且无论如何,让异常控制您的流程不是一个好主意。

答案 1 :(得分:0)

如果进程未在运行,它将没有关联的PID,因此ProcList []将为空。然后,当您在return语句中访问它时,它会引发异常,因为该数组中没有任何内容。