c# - 这是自定义异常的好习惯吗?

标签 c# exception

public class PageNotFoundException : HttpException
{
    public PageNotFoundException()
        : base(404, "HTTP/1.1 404 Not Found")
    {

    }
}

这个想法是,而不是每次都输入这个

throw new HttpException(404, "HTTP/1.1 404 Not Found") 

我宁愿写

throw new PageNotFoundException();

我打算添加一个包含 innerException 的重载,但我绝不会在 try/catch block 中使用它。

您会考虑这种良好做法吗?
即从异常继承并将硬编码信息传递给 base(...)。

最佳答案

我决定重写我的答案以针对您的实际问题,从更广泛的意义上说,MVC 应用程序并不是这些最佳实践唯一适用的对象。

(1) 回答。 这不是好的做法。您应该使用直接抛出 HttpException 的异常生成器方法。

public static void ThrowPageNotFoundException() {
    throw new HttpException((Int32)HttpStatusCode.NotFound, "HTTP/1.1 404 Not Found");
}

(2) 。使用异常生成器方法(例如我提供的代码)。这允许您避免拥有自己的异常类型的额外性能成本,并允许它被内联。抛出异常的成员不会被内联。这将是方便 throw 的合适替代品。

(3) 。尽可能使用基类库异常,只有在绝对没有满足需要的基类异常时才创建自​​定义异常。创建自定义异常会增加更深层次的异常层次结构,这会在不需要时使调试变得更加困难,增加额外的性能开销,还会增加代码库的膨胀。

(4) 不要。抛出基类 System.Exception。请改用特定的异常类型。

(5) 不要。为方便起见创建自定义异常。这不是自定义异常的好理由,因为异常本质上是昂贵的。

(6) 不要。创建自定义异常只是为了拥有您自己的异常类型。

(7) 不要。抛出可以通过更改调用代码来避免的异常。这表明您在 API 中存在可用性错误,而不是实际问题。

任何阅读过 .NET 开发系列框架设计指南的人都会知道这些实践,它们是非常好的实践。这些正是构建 .NET 框架和 MVC 的实践。

关于c# - 这是自定义异常的好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10221811/

相关文章:

c# - 我可以在一个 Controller 中有两个 View 模型吗?

C# 泛型,状态模式的交叉引用类

c# - 在表更新时,在我的 .NET 代码中触发一个操作

java - 构造函数处理异常并使用 this 关键字 Java

抛出异常后 Angular 2 不更新 View

java - 迭代器和 ConcurrentModificationException

android - 如何重用相同的 Kotlin Flow 来执行相同的代码

c# - IsolationLevel.RepeatableRead 以防止重复

c# - 在 C# 中引发事件的单元测试(按顺序)

.net - 为什么 UnhandledExceptionEventArgs.ExceptionObject 是一个对象而不是 Exception?