Хотя в вашем примере странно, что он не работает, возьмите вот такой:
try
{
//Code 1
String s = "1|2";
//Code 2
}
catch
{
Console.WriteLine(s.Split('|')[1]);
}
Это приведет к тому, что перехватчик сгенерирует исключение нулевой ссылки, если код 1 прервался. Теперь, хотя семантика try / catch довольно хорошо понятна, это был бы досадный угловой случай, поскольку s определяется с начальным значением, поэтому теоретически он никогда не должен быть нулевым, но при разделяемой семантике это будет *
Опять же, теоретически это можно исправить, разрешив только отдельные определения (String s; s = "1|2";
) или какой-то другой набор условий, но обычно проще просто сказать нет.
Кроме того, он позволяет определять семантику области видимости глобально без исключения, в частности, локальные элементы действуют до тех пор, пока {}
они определены во всех случаях. Незначительная точка, но точка.
Наконец, чтобы сделать то, что вы хотите, вы можете добавить набор скобок вокруг try catch. Дает вам объем, который вы хотите, хотя это достигается за счет небольшой читабельности, но не слишком много.
{
String s;
try
{
s = "test";
//More code
}
catch
{
Console.WriteLine(s);
}
}