2012-05-23 16 views
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函数退出函数时错误冲击吗?

Thnak you。

回答

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,如果它对特殊处理很有意思。

+0

我记得读到它抛出异常也是一个昂贵的操作。虽然我无法告诉你我在哪里或什么时候阅读。 –

1

如果您愿意,例外情况的意图是'不严格'。不要打电话给Exit,除非它真的是致命的,而且你不希望程序继续。客户端代码应该捕获异常,并评估是否退出。

此外,如果您想记录该错误,请在throw之前执行。

ps。不要在关键字后命名你的功能....

+0

是的,这只是一个例子。我将重命名该函数。 – Alvin