Какова цель использования нескольких блоков «catch» при обработке исключений - PullRequest
0 голосов
/ 12 декабря 2018
  1. Почему нам нужно несколько блоков «catch», хотя мы можем написать одно общее исключение?
  2. Важно ли знать все типы исключений и их цели, чтобы получить хороший кусокcode?

    Я много гуглил, но все еще смущаюсь при обработке исключений.Любой хороший пример?

Общее исключение:

try{
//some code
}
catch(Exception e){
//print e
}
//that's it.

Несколько уловов

try{
//some code
}
catch(IOException e){
}
catch(SQLException e){
}

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Существует несколько преимуществ использования нескольких исключений:

  1. Общие исключения не позволят вам узнать точную основную причину проблемы, особенно если в реализации метода задействовано много шагов / проверок.Кроме того, если исключение возникает по разным причинам, вам необходимо выбросить различные типы исключений из реализации метода вызывающего абонента.

Например: вы можете выбросить пользовательские исключения.

Вот ваш сервисный код:

    public void Login(string username, string password)
    {
      if(string.IsNullOrWhiteSpace(username) || string.IsNullOrWhiteSpace(password))
      {
      throw InvalidUserNameException();
      }
      if(!IsInternetAvaialable()) 
      {
      throw NoInternetAvailableException()
      }
      else
      {
      //Implement though your login process and if need use various custom exceptions or throw the exception if occurs.
      }
    }

    public class InvalidUserNameException : Exception
    { 
      public InvalidUserNameException()
      {
      }

      public InvalidUserNameException(string message)
        : base(message)
      {
      }

      public InvalidUserNameException(string message, Exception inner)
        : base(message, inner)
      {
      }
   }

Способ вызова:

try {
  ...
} catch(InvalidUserNameException e) {
  // Show Alert Message here
} catch(NoInternetAvaibleException e) {
  // Show Alert Message with specific reason
}
catch(Exception e) {
  // Other Generic Exception goes here
}

Ссылка: https://docs.microsoft.com/en-us/dotnet/standard/exceptions/how-to-create-user-defined-exceptions

0 голосов
/ 12 декабря 2018

1.Почему нам нужно несколько блоков «catch», даже если мы можем написать одно общее исключение?

Иногда вам может потребоваться указать причину проблемы.

Например,

try {
  ...
} catch(IOException e) {
  // Print "Error: we cannot open your file"
} catch(SQLException e) {
  // Print: "Error: we cannot connect to the database"
}

С различными ошибками пользователи могут легко понять, что пошло не так.

Если мы выберем

try {
  ...
} catch(Exception e) {
  // Print "Error: " + e.
}

Пользователям будет сложнее понять, что пошло не так.

Кроме того, мы можем отправлять пользователей на разные страницы в соответствии с ошибкой, если мы используем несколько catch -ов.


2. Важно знать все исключениятипы и их цели, чтобы сделать хороший кусок кода?

Лично я бы пошел с важными исключениями, такими как IO, DB и т. д., которые могут вызвать серьезные проблемы.Для других я бы поймал с общим исключением.

...