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/