gpt4 book ai didi

c# - 在公共(public)异常处理程序中的 catch block 外部抛出不带参数的语句

转载 作者:行者123 更新时间:2023-11-30 13:59:11 26 4
gpt4 key购买 nike

我有一个通用的异常处理函数:

public static void ManageException(Exception ex,
string customErrorMsg,
bool displayMessage)

我想从一些 catch block 中调用它。

处理异常后,我想重新抛出异常,同时保留堆栈跟踪。

我在某处读到我应该不带任何参数的throw 语句。 throw 语句(没有任何参数)在 catch block 中工作正常,但在我的 ManageException 函数中,它给了我一个编译错误:

A throw statement with no arguments is not allowed outside of a catch clause

是否有任何解决方案可以通过 ManageException 函数重新抛出整个堆栈跟踪的异常并且不影响性能?

我正在使用 C# 2.0。

最佳答案

您必须指定要抛出的异常,如:

throw ex;

如您的错误所述,您只能从 catch block 内重新抛出异常(使用 throw;)。恕我直言,这也是唯一有意义的地方;您要么捕获异常,要么抛出异常,并且可能不应该两者都做。从名为 ManageException 的方法中,我想知道为什么您要管理上述异常,但无论如何都会抛出它。

也许您想要将原始异常包装在您自己的异常中,提供更多详细信息?在这种情况下,我会抛出一个新的异常,将 ex 作为 InnerException,如果您想保留该数据。


根据你的评论,如果你想做的是确定你是否应该重新抛出异常,我建议:

  • 将您的方法重命名为 TryManageException 并更改签名以返回 bool - 如果异常未得到妥善管理且需要重新抛出,则返回 false;如果已处理,则返回 true。
  • 如果该方法返回 false(= 未管理),则从 catch block 中重新抛出或执行您需要的任何其他操作:

    try
    {
    decimal oops = 5 / 0;
    }
    catch (Exception e)
    {
    if (!CommonExceptionHandler.TryManageException(e, "oops", "oops"))
    throw;
    }

关于c# - 在公共(public)异常处理程序中的 catch block 外部抛出不带参数的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14112851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com