Этот блок try-catch действителен? - PullRequest
2 голосов
/ 21 сентября 2011

Новый вопрос ...

Допустимо ли:

try
{
    // code which may fail
}
catch
{
    Console.Writeline("Some message");
}

Или я всегда должен использовать:

try
{
    // code which may fail
}
catch (Exception e)
{
    Console.Writeline("Some message");
}

Ответы [ 10 ]

5 голосов
/ 21 сентября 2011

Оба блока действительны.

У первого не будет переменной исключения.

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

try 
{
   // your code here
}
catch(SpecificException)
{
   // do something - perhaps you know the exception is benign
}

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

3 голосов
/ 21 сентября 2011

Да, конечно, такой блок перехвата, называемый общим предложением перехвата, более интересные детали можно найти в спецификации языка C # 4.0, 8.10.который не указывает ни тип исключения, ни имя переменной исключения, называется общим предложением catch.Оператор try может иметь только одно общее предложение catch, и если оно присутствует, оно должно быть последним предложением catch

2 голосов
/ 21 сентября 2011

Да, ваш первый блок кода действителен. Он поймает все исключения.

1 голос
/ 21 сентября 2011

Не забывайте, что вы можете цеплять ловить ваши исключения.Это позволит вам обрабатывать различные сценарии на основе исключений, которые может выдать код.

try
{
    //Your code.
}
catch(SpecificException specificException)
{
    //Handle the SpecificException
}
catch(AnotherSpecificException anotherSpecificException)
{
    //Handle AnotherSpecificException
}
catch(Exception exception)
{
    //Handle any Exception
}
1 голос
/ 21 сентября 2011
catch (Exception e)
{
    Console.Writeline("Some message");
}

В этом блоке вы можете использовать SqlException и т. Д.

catch (SqlException e)
{
    Console.Writeline("Some message");
}

Для этого используйте "(SqlException e)"

Если вы будете использовать общее менструальное сообщение,используйте это:

catch
{
    Console.Writeline("Some message");
}

or

catch (Exception)
{
    Console.Writeline("Some message");
}
1 голос
/ 21 сентября 2011

Конечно, это верно, вы указываете catch(Exception e), когда хотите вывести сообщение об ошибке ex.Message, или перехватить пользовательское или конкретное исключение.Используйте catch в вашей ситуации.

1 голос
/ 21 сентября 2011

Да, это действительно.

Вы всегда можете обратиться к этой статье:

Рекомендации по обработке исключений в MSDN

1 голос
/ 21 сентября 2011

Ответ @David действителен.
Вы можете использовать второй синтаксис, если хотите получить больше информации или поймать конкретное исключение.Например,

catch (Exception e) 
{
  Debug.Print(e.Message);
}
1 голос
/ 21 сентября 2011

Первый действителен, и он действует так же, как второй.

http://msdn.microsoft.com/en-us/library/0yd65esw%28v=vs.80%29.aspx

Предложение catch можно использовать без аргументов, в этом случае оно ловит любой тип исключения, и называется общим уловом пункт. Он также может принимать аргумент объекта, полученный из System.Exception, в этом случае он обрабатывает конкретное исключение.

1 голос
/ 21 сентября 2011

Это так. Это поймает все исключения. Таким образом, два примера кода делают то же самое.

...