Почему я не могу использовать такой код?
1
int i = 0;
try i = int.Parse("qwerty");
catch throw;
2
try i = int.Parse("qwerty");
catch;
finally Log.Write("error");
И должен писать так:
1
int i = 0;
try { i = int.Parse("qwerty"); } catch { throw; }
2
try { i = int.Parse("qwerty");}
catch {}
finally {Log.Write("error");}
PS:
Я могу использовать инструкцию if-else без {}. Почему я должен использовать их с инструкцией try-catch (-finally)? Есть ли значимая причина?
Это только потому, что некоторые люди считают, что код трудно читать?
Несколько месяцев назад я задал этот вопрос на русском форуме по программированию, но я не получил удовлетворительного ответа...
Ответ 1
Что решили дизайнеры языка.
В любом случае даже одна строка if
является опасной - люди добавляют строки, ожидающие их включения в if
, что, конечно же, поскольку они не находятся в {}
, это не так.
Ответ 2
С#, вероятно, сделал привязки требованием, потому что С++ сделал. Мое предположение о том, почему они требуются в С++, заключается в том, что упростить запись вложенных и множественных блоков catch без ошибок. Скобки добавляют дополнительный уровень видимости, что может быть удобно, но я не могу придумать, почему это потребуется.
Ответ 3
Честно говоря, я не уверен, почему, но я задал себе тот же вопрос несколько лет назад. Только ответ, который я могу думать о том, что имеет смысл, состоит в том, что try
должен открываться и заканчиваться скобкой, а catch
должен иметь что-то там, чтобы ловить в скобках, потому что это не нормально, если... else.., но скорее они похожи на functions
.