使用Environment.ExitCode与从Main返回int的区别

16

我计划在我的Shell脚本中使用C#可执行文件的返回代码。我有两个选项:

从主方法返回int值

class MainReturnValTest
{
    static int Main()
    {
        //...
        return 0;
    }
}

(或者)

使用Environment.Exit退出程序并返回退出代码

class MainReturnValTest
{
    static void Main()
    {
        //...
        Enviroment.Exit(exitCode);
    }
}

使用上述任何一种方式从可执行文件返回值是否可以?或者其中一种方式是否优于其他方式?


2
因为这个问题的标题提到了 Environment.ExitCode,但是问题的正文却谈到了 Environment.Exit(),所以被投了反对票。它们并不是同一件事情。 - Dan
3个回答

17

Environment.Exit()是一种粗暴的中止方式,会立即终止进程。只有在检测到严重故障时才使用它,在AppDomain.UnhandledException事件处理程序中使用是适当的,例如当程序因未处理的异常而即将终止时。

异常是发出应该以非零ExitCode终止程序的不寻常条件的好方法。实际上,它自动设置为异常的HResult属性值,无需任何代码。


7

如果您正在编写线性程序,则从Main返回即可。如果您有更复杂的逻辑或可能有其他执行线程,则可能需要使用Exit(returnCode)。两种方法都等同于您的shell脚本。


1
除了 Environment.Exit() 相当于在程序仍在运行时切断电源之外,它应该尽可能避免使用,正如下一个帖子所述。 - debracey

1
区别在于当您需要基于另一个应用程序的退出状态处理父应用程序上的事件时。Return主要用于应用程序内部,而exit用于突然结束应用程序。在这里,退出状态可以被另一个应用程序用来决定其下一步操作。
当您需要从调用代码的另一个函数返回值或指示某个事件的代码执行结束时,使用return。
您也可以这样看:
1)返回结束一个函数,该函数可能是main();退出用于结束程序。
2)使用特定的返回值结束程序不能被另一个应用程序隐式解释,但是退出状态可以用于决定代码实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接