我应该使用什么样的例外来"找不到记录"?(C#)

35 c# exception

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

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

我应该使用什么样的例外来解决这个"没有记录"的问题?我看到有不同类型的异常,但我不确定哪个是合适的,或者即使我正确编码.

Joe*_*Joe 48

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

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

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

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

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


Ser*_*rvy 6

创建您自己的异常非常容易。只需创建一个类,为其指定名称、扩展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) { }
}
Run Code Online (Sandbox Code Playgroud)


dsg*_*fin 5

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

  • @安妮是的。继承异常类。 (2认同)