我有以下代码,当我点击表格时检索记录详细信息:
public ActionResult City(string rk)
{
try
{
var city = _cityService.Get("0001I", rk);
if (city == null)
{
throw new ServiceException("", "Error when fetching city " + rk);
}
}
}
我应该使用什么样的例外来解决这个“没有找到记录”的问题?我看到有不同类型的异常,但我不确定哪种是合适的,或者即使我正确编码也是如此。
答案 0 :(得分:37)
KeyNotFoundException是一个合理的选择,并且符合the Microsoft guideline:
考虑抛出驻留在System命名空间中的现有异常,而不是创建自定义异常类型。
但是,您可以考虑创建自己的Exception
类型(再次来自Microsoft指南):
...您有一个错误条件,可以通过与任何其他现有异常不同的方式以编程方式处理。
如果您确实创建了自己的Exception
,则应该遵循guidelines for designing custom exceptions,例如您应该使Exception
类型为Serializable。
答案 1 :(得分:5)
您应该创建自己的例外,在这种情况下可以将其称为RecordNotFoundException
。
答案 2 :(得分:0)
创建自己的异常非常简单。只需创建一个类,为其命名,扩展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) { }
}