53

当我单击表格网格时,我有以下代码检索记录详细信息:

public ActionResult City(string rk)
{ 
    try
    {
        var city = _cityService.Get("0001I", rk);
        if (city == null)
        {
            throw new ServiceException("", "Error when fetching city " + rk);
        }
    }
}

对于这个“未找到记录”问题,我应该使用什么样的异常?我看到有不同类型的异常,但我不确定哪种是合适的,或者即使我正确编码。

4

3 回答 3

67

KeyNotFoundException将是一个合理的选择,并且符合以下 Microsoft 指南

考虑抛出驻留在系统命名空间中的现有异常,而不是创建自定义异常类型。

Exception但是,如果(再次来自 Microsoft 指南),您可以考虑创建自己的类型:

...您有一个错误情况,可以以与任何其他现有异常不同的方式以编程方式处理。

如果您确实创建了自己的Exception,您应该遵循设计自定义异常的指南,例如,您应该使您的Exception类型可序列化。

于 2012-10-10T17:04:39.023 回答
7

您应该创建自己的异常,并RecordNotFoundException在这种情况下调用它。

于 2012-10-10T16:37:05.173 回答
3

创建自己的异常非常容易。只需创建一个类,为其命名、扩展Exception或其他一些异常类型,并提供您需要的构造函数(只需调用基本Exception构造函数)。

如果你想添加更多,你可以,但你通常不需要。

如果您发现自己为您的项目创建了许多异常,您可能希望创建一个基本异常类型(扩展 Exception),所有异常都扩展该类型。这是您在编写库时可能会做的事情。它将允许某人捕获特定异常,或从您的库中抛出的异常,或任何异常。

public class MySuperAwesomeException : Exception
{
    public MySuperAwesomeException() : base() { }
    public MySuperAwesomeException(string message) : base(message) { }
    public MySuperAwesomeException(string message, Exception innerException)
        : base(message, innerException) { }
}
于 2012-10-10T16:44:07.910 回答