【问题标题】:Throw exceptions C# advanced抛出异常 C# 高级
【发布时间】:2017-05-16 14:07:08
【问题描述】:

我有 try 和 catch 的代码。

try
{
    // Some code...
}
catch (Exception err)
{
     throw err;
}

写这样的代码有优势吗?

从 catch 中抛出异常并编写 try 和 catch 而不是从中断的行中获取错误。

【问题讨论】:

  • 如果按原样编写,没有任何好处,只有搞砸 StackTrace 的缺点

标签: c# try-catch


【解决方案1】:

只有当你打算用它做某事时,你才应该捕获一个异常。例如,要向其中添加额外信息,将其记录到文件或类似文件中,或者更改异常:

try
{
    //Some Code...
}
catch (WebException err)
{
    throw new LicenseException("This was really bad!", err);
}
catch (Exception err)
{
    err.Data.Add("some-info", 123);

    logFramework.Log(err);

    throw;
}

永远不要重新抛出相同的异常 (throw err):这样做会丢失调用堆栈。相反,只是throw,它保留了调用堆栈。

【讨论】:

  • 您能在此处添加finally{},我会投赞成票
  • 最后是为了什么?它在这个样本中的用途是什么? @MadMyche 这是问题的一部分吗?
  • 不,但如果我们作为一个集体试图修复和使用最佳实践,我会抛出一些清理代码
  • 有什么要清理的?我可以在此示例代码中添加 100 条最佳实践,但这与所提出的问题无关。
【解决方案2】:

在这两个选项中,您必须在更高级别上捕获异常。第一个选项(您的代码)让您有机会对异常做出反应或制作额外的日志。

【讨论】:

    【解决方案3】:

    有时可以使用这种方法,但一般不推荐。

    另外,如果你需要抛出这样的异常,你需要稍微修改一下你的代码:

        try
         {
            //Some Code...
         }
        catch (Exception err)
         {
             //I'll recommend to remove err here, because if not you'll lose  the full stack trace.
             throw;
         }
    

    【讨论】:

      猜你喜欢
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-01
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多