Да, потому что вы объявили rite
(я думаю, что вы имеете в виду "правильно" ...) и left
в области действия блока try / catch. Что произойдет, если первый вызов Convert.ToDecimal
не удастся? Ну, тогда rite
никогда не был назначен, а left
никогда даже не был объявлен. Вы должны поднять их на уровень и объявить их вне try / catch. Просто выполните назначение из блока try.
Кроме того, вы должны выйти из функции, если произойдет ошибка, так как код, который приходит позже, ожидает, что rite
и left
будут действительными, чего не будет, если этот обработчик перехвата выполнится.