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

Что делает "бросок"? сам по себе делаете?

Возможный дубликат:
разница между throw и throw new Exception()

Какой смысл иметь

catch (Exception)
{
    throw;
}

Что это делает?

4b9b3361

Ответ 1

Само по себе ключевое слово throw просто заново вызывает исключение, обнаруженное выше в инструкции catch. Это удобно, если вы хотите выполнить некоторую рудиментарную обработку исключений (возможно, компенсирующее действие, например, откат транзакции), а затем перестроить исключение на вызывающий метод.

Этот метод имеет одно существенное преимущество перед улавливанием исключения в переменной и метать этот экземпляр: он сохраняет исходный стек вызовов. Если вы поймаете (Exception ex) и затем выбросите ex, ваш стек вызовов начнется только с этого оператора throw, и вы потеряете метод/строку исходной ошибки.

Ответ 2

Иногда вы можете сделать что-то вроде этого:

try
{
    // do some stuff that could cause SomeCustomException to happen, as 
    // well as other exceptions
}
catch (SomeCustomException)
{
    // this is here so we don't double wrap the exception, since
    // we know the exception is already SomeCustomException
    throw;
}
catch (Exception e)
{
    // we got some other exception, but we want all exceptions
    // thrown from this method to be SomeCustomException, so we wrap
    // it
    throw new SomeCustomException("An error occurred saving the widget", e);
}

Ответ 3

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

catch (Exception) {
  myLogger.Log(LogLevels.Exception, "oh noes!")
  throw; 
}

Я изначально ошибочно думал, что это раскрутит ваш стек, но это произойдет только в том случае, если вы сделаете следующее:

catch (Exception err) {
  throw err; 
}

Ответ 4

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

Ответ 5

Просто переверните текущее исключение, и это исключение сохранит его "источник" и трассировку стека.