.NET抛出自定义异常

and*_*inn 10 .net exception

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

Ran*_*pho 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();
}
Run Code Online (Sandbox Code Playgroud)

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