C# 可以自定义异常 catch/kill 本身吗?
C# Can a custom exception catch/kill itself?
我的代码是这样的
var i = 0;
try
{
i = faultyProcedure();
}
catch (Exception ex)
{
try
{
throw new CustomException("faultyProcedure called", ex);
}
catch (CustomException) {}
}
虽然有效,但看起来很傻。
自定义异常会执行所有日志记录、邮件等。必要时甚至会退出应用程序。
有没有办法让 catch/kill 本身的自定义异常,因此不需要内部 try/catch 块?
所以...您正在使用 CustomException
来处理其他异常?如果是这样,那么我很抱歉告诉你,但这不仅看起来很傻,而且 是 很傻。
这不是例外的目的。
异常旨在指示异常情况,主要是您在编写代码时无法控制的事情,例如 IO 或网络问题。
要处理异常,您可以将代码写入任何 class,但抛出新异常只是为了处理被 catch 子句捕获的异常是没有意义的。
我相信这是一个 vexing exception:
的例子
Vexing exceptions are the result of unfortunate design decisions. Vexing exceptions are thrown in a completely non-exceptional circumstance, and therefore must be caught and handled all the time.
Eric Lippert 博客中的示例是 int.Parse
,但我认为这段代码与令人烦恼的异常示例一样有效。
我的代码是这样的
var i = 0;
try
{
i = faultyProcedure();
}
catch (Exception ex)
{
try
{
throw new CustomException("faultyProcedure called", ex);
}
catch (CustomException) {}
}
虽然有效,但看起来很傻。 自定义异常会执行所有日志记录、邮件等。必要时甚至会退出应用程序。
有没有办法让 catch/kill 本身的自定义异常,因此不需要内部 try/catch 块?
所以...您正在使用 CustomException
来处理其他异常?如果是这样,那么我很抱歉告诉你,但这不仅看起来很傻,而且 是 很傻。
这不是例外的目的。
异常旨在指示异常情况,主要是您在编写代码时无法控制的事情,例如 IO 或网络问题。
要处理异常,您可以将代码写入任何 class,但抛出新异常只是为了处理被 catch 子句捕获的异常是没有意义的。
我相信这是一个 vexing exception:
的例子Vexing exceptions are the result of unfortunate design decisions. Vexing exceptions are thrown in a completely non-exceptional circumstance, and therefore must be caught and handled all the time.
Eric Lippert 博客中的示例是 int.Parse
,但我认为这段代码与令人烦恼的异常示例一样有效。