C# 抛出异常以停止进程
有时在C#中,我想抛出一个无法处理的异常。导致进程停止的升级异常。这可能吗?如果您不想处理异常,请不要处理它。您可以执行以下操作:C# 抛出异常以停止进程,c#,exception-handling,C#,Exception Handling,有时在C#中,我想抛出一个无法处理的异常。导致进程停止的升级异常。这可能吗?如果您不想处理异常,请不要处理它。您可以执行以下操作: class BadassException : Exception { public BadassException(string message) { Environment.FailFast(message); } } ... throw new BadassException("Erk!!!"); 像这样简单地结束流程如何: Proc
class BadassException : Exception
{
public BadassException(string message)
{
Environment.FailFast(message);
}
}
...
throw new BadassException("Erk!!!");
像这样简单地结束流程如何:
Process.GetCurrentProcess().Close();
那也不例外,那是原子弹
不过说真的,有更好的方法来处理这种情况。如果要终止进程,请查看以下选项。这实际上是不可能的,因为每个异常都必须继承自
异常
基类,并且可以执行捕获(异常)
然而,正如其他人所指出的,你可能会很快失败。您还可以抛出无法具体捕获的异常,如下所示:
public class MyLibraryClass
{
private class MyException : Exception { ... }
public void MyMethod() { throw new MyException(); }
}
然后调用方不能执行
捕获(MyException exc)
,只能执行捕获(Exception exc)
。但是,这仍然意味着可以捕获异常。任何未处理的异常都将停止应用程序。通常应用程序都有一个应用程序或顶级异常处理程序,它可以捕获任何未处理的异常,进行任何数据维护,并优雅地关闭应用程序
在您的例子中,我认为最好的方法是创建一个新的异常,它派生自名为StopApplicationException之类的异常类
然后,每当需要停止应用程序时,抛出这种类型的异常。在调用堆栈更上层的catch块中:
catch (StopApplicationException)
{
//Stop your application
}
catch (ArgumentNullException)
{
//Null Exception Logic goes here...
}
catch ...And so forth
为什么不简单地抛出一个异常并强制关闭进程?+1只是为了彻底滥用抛出语法。很明显这是一个糟糕的例外。我认为这是一个可怕的编码。异常不应该包含任何逻辑。抛出异常,然后由catch块根据异常的类型确定执行何种逻辑。抛出你的坏异常,但让catch块处理环境。FailFast。@Jon Raynor:我同意你的观点,但OP没有要求这样做。我只是给出了要求:)CLR支持抛出非异常的对象。用一个小手滚,你可以很容易地扔任何东西。IIRC,这些将仅使用
catch{}
捕获。