Почему не разрешено использовать инструкцию try-catch без {}?

Почему я не могу использовать такой код?

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.