【问题标题】:Can I delete the e from catch block of try-catch?我可以从 try-catch 的 catch 块中删除 e 吗?
【发布时间】:2016-10-25 07:12:36
【问题描述】:
catch (HttpAntiForgeryException e)
{
    throw new HttpAntiForgeryException("Forgery Exception");
}

当我构建项目时,有一个警告说:变量'e'被声明但从未使用过。 那是因为 e 不是必需的吗?

【问题讨论】:

  • 这是一个非常糟糕的做法。如果您想用自己的异常替换某些异常,请将此异常作为InnerException 传递。如果您不这样做,您将丢失有关您的异常的根本原因的信息。
  • 只要有一个已声明但从未使用过的变量,就会出现该警告。那个警告就是——一个警告。这本身并不表明该变量是否真的有用。 (在这种情况下,确实如此。)

标签: c# .net exception exception-handling try-catch


【解决方案1】:

是的。你可以简单地写

catch (HttpAntiForgeryException)
{
    throw new HttpAntiForgeryException("Forgery Exception");
}

但是,您正在重新抛出相同类型的异常。你也可以简单地删除这个 catch 块。

【讨论】:

  • 异常内容不同。
  • @C4u 不同且不太详细。如果您在消息中添加一些详细信息,则可以重新抛出。
【解决方案2】:

如果您不想对异常执行任何操作,则没有必要,在您的情况下,您正在抛出自定义消息,因此可以这样使用:

catch 
{
   throw new HttpAntiForgeryException("Forgery Exception");
}

或者像这样:

// For specific exception
catch (HttpAntiForgeryException)
{
       throw new HttpAntiForgeryException("Forgery Exception");
}

但是你不会得到任何关于这个异常的信息,比如错误消息、堆栈跟踪、内部异常等。我更喜欢你在 Catch 中处理异常,或者properly log他们供开发者参考

【讨论】:

    【解决方案3】:

    这是因为你没有在 catch 块的任何地方使用变量 e。您可以轻松捕获该异常,这样您就可以更好地了解异常的根本原因,而不是引发新异常。

    catch (HttpAntiForgeryException e)
    {
        Console.WriteLine(e.Message); // Console.Writeline or whichever way you want      
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-14
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 2011-03-19
      • 2011-11-17
      相关资源
      最近更新 更多