Подтвердить что ты не робот

Какое исключение я должен использовать для "Нет записи"? (С#)

У меня есть следующий код, который извлекает данные записей, когда я нажимаю на таблицу:

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

Какое исключение я должен использовать для этой проблемы "без записи"? Я вижу, что есть разные исключения, но я не уверен, что было бы уместно или даже если бы я правильно это кодировал.

4b9b3361

Ответ 1

KeyNotFoundException был бы разумным выбором и соответствовал бы руководство Microsoft:

Представьте, что вы выбрали существующие исключения, находящиеся в пространствах имен System, вместо создания настраиваемых типов исключений.

Однако вы могли бы подумать о создании своего собственного типа Exception if (опять же из рекомендаций Microsoft):

... у вас есть условие ошибки, которое можно программно обрабатывать по-другому, чем любые другие существующие исключения.

Если вы создаете свой собственный Exception, вы должны следовать рекомендациям для разработки пользовательских исключений. вы должны сделать свой Exception тип Serializable.

Ответ 2

Вы должны создать свое собственное исключение и, возможно, назвать его RecordNotFoundException в этом случае.

Ответ 3

Создание собственного исключения довольно просто. Просто создайте класс, дайте ему имя, расширьте Exception или какой-либо другой тип исключения и предоставите нужные вам конструкторы (просто вызовите базовые конструкторы Exception).

Если вы хотите добавить еще, вы можете, но вам часто не нужно.

Если вы обнаружите, что создаете ряд исключений для своего проекта, вы можете создать базовый тип исключения (который расширяет исключение), который распространяется на все ваши исключения. Это можно сделать при написании библиотеки. Это позволит кому-то поймать либо конкретное исключение, либо исключение, выброшенное из вашей библиотеки, или любое исключение.

public class MySuperAwesomeException : Exception
{
    public MySuperAwesomeException() : base() { }
    public MySuperAwesomeException(string message) : base(message) { }
    public MySuperAwesomeException(string message, Exception innerException)
        : base(message, innerException) { }
}