任何人都可以阐明抛出自定义异常(从 System.Exception 继承)的利弊,或者使用它们的正确方法?我已经知道何时/何时不抛出异常,但我正在寻找有关如何创建自己的自定义异常的指导。
最佳答案
这些都是很棒的帖子。到目前为止,我最同意 Brian Rasmussen——当您想要处理不同类型的特定异常时创建自定义异常。
也许一个例子会有所帮助。这是一个人为的例子,在日常代码中可能有用也可能没用。假设您有一个类负责对用户进行身份验证。此类除了对用户进行身份验证外,还具有锁定机制,可在多次尝试失败后锁定用户。在这种情况下,您可以将两个自定义异常设计为类的一部分:AuthenticationFailedException
和 UserLockedOutException
.您的 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
,将无法区分引发异常的不同原因。
关于.NET 抛出自定义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1573130/