.NET 抛出自定义异常

标签 .net exception

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

最佳答案

这些都是很棒的帖子。到目前为止,我最同意 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 ,将无法区分引发异常的不同原因。

关于.NET 抛出自定义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1573130/

相关文章:

c# - 将参数从文本文件传递到控制台应用程序?

Java try catch问题

java - 数组索引越界异常 -77

c++ - 捕获 EXCEPTION_GUARD_PAGE 是否安全

c# - Markdown 夏普/ Markdown .NET : How to retrieve non-formatted text from markdown?

c# - 从不同位置获取日期时间

c# - 动态 SQL 查询 Entity Framework

.net - slim 的.net : How do I debug test fixtures using visual studio?

c++ - cin 并尝试/捕获

c# - 系统.TypeLoadException : get_TargetFramework doesn't have an implementation