.NET抛出自定义异常

时间:2009-10-15 15:30:54

标签: .net exception

任何人都可以了解抛出自定义异常(继承自System.Exception)的优缺点,或者使用它们的正确方法?我已经知道何时/何时不抛出异常,但我正在寻找有关如何创建自己的自定义异常的指导。

6 个答案:

答案 0 :(得分:9)

答案 1 :(得分:9)

这些都是很棒的帖子。到目前为止,我最同意Brian Rasmussen - 当您想要处理不同类型的特定异常时创建自定义异常。

也许一个例子会有所帮助。这是一个人为的例子,在日常代码中可能有用,也可能没用。假设您有一个负责验证用户的类。除了对用户进行身份验证之外,该类还具有锁定机制,可在多次尝试失败后锁定用户。在这种情况下,您可以将设计作为第二类自定义例外的一部分:AuthenticationFailedExceptionUserLockedOutException。如果用户成功通过身份验证,则AuthenticateUser方法将返回而不抛出,如果用户身份验证失败则抛出AuthenticationFailedException,如果用户被锁定,则抛出UserLockedOutException

例如:

try
{
    myAuthProvider.AuthenticateUser(username, password);
    ShowAuthSuccessScreen();
}
catch(AuthenticationFailedException e)
{
    LogError(e);
    ShowAuthFailedScreen();
}
catch(UserLockedOutException e)
{
    LogError(e);
    ShowUserLockedOutScreen();
}
catch(Exception e)
{
    LogError(e);
    ShowGeneralErrorScreen();
}

再次,一个人为的例子。但希望它能说明您希望如何以及为什么要创建自定义异常。在这种情况下,AuthProvider类的用户以不同的方式处理每个自定义异常。如果AuthenticateUser方法只是抛出Exception,则无法区分为什么抛出异常的不同原因。

答案 2 :(得分:4)

使用您自己的例外来标记特定于您的应用程序/域的错误。优点是你的catch块可以过滤正确的异常并对其采取行动。对其他一切使用特定的标准例外。

答案 3 :(得分:1)

自定义例外允许您提供清晰,有意义的例外,这反过来可以使您的库更有用,只要您在适当的时候使用现有的例外。

在需要引发不直接适合框架异常模型的异常时,创建自定义异常。

答案 4 :(得分:1)

我最近写了一篇关于这个特定主题的完整博客文章:

基本摘要虽然是......

  

如果您希望开发人员针对问题采取纠正措施或记录事后调试,则应该只创建新的异常。

答案 5 :(得分:1)