0

如何优雅地抛出异常?

public void Test() 
{
 if (error != 0) {
  string msg = "Error";
  throw new Exception(msg);
 }

  // Other function
  ...
}

我也改变了throw new Exception(msg);与记录器

public void Test()
{
 if (error != 0) {
  string msg = "Error";
  //throw new Exception(msg);
  logger.Error(msg);
 }

  // Other function
  ...
}

发生错误时是否应该使用 Exit 函数退出该函数?

谢谢你。

4

2 回答 2

2

您想在抛出异常之前记录。

您还想抛出一个继承自 System.Exception 的异常类型,以便消费者可以捕获特定类型。

抛出异常将退出函数(如果有的话,实际上会先处理一个 finally 块)所以你只需要抛出。

此外,如果您在错误条件下捕获不同的异常,您可以记录,然后简单地调用 throw;抛出原始异常而不是丢弃堆栈。如果您想在这种情况下抛出自己的异常类型,可以将原始异常包含为内部异常

catch (Exception e)
{
    // log exception details
    throw;
}

或者 ...

catch (Exception e)
{
    // log exception details
    throw new MyCustomException("message", e);   // inherits from Exception
}

最后一个(如果适用)的好处是,如果对特殊处理感兴趣,消费者可以捕获 MyCustomException。

于 2012-05-23T02:26:53.640 回答
1

如果您愿意,例外的目的是“不优雅”。不要调用 Exit,除非它确实是致命的并且您不希望程序继续运行。客户端代码应该捕获异常,并评估是否退出。

此外,如果您想记录错误,请在throw.

附言。不要在关键字之后命名你的函数....

于 2012-05-23T02:28:36.637 回答