Строка формата определяет три аргумента, но вы предоставили только два:
String.Format("Withdrawn {0} from {1}\nBalance now: {2}", am, aN)
Это бросает FormatException
, но не тот, о котором вы думали, когда писали блок FormatException
catch.
Поэтому, чтобы избежать этого исключения, вам нужен способ получить новый баланс в переменной, которую вы можете передать String.Format
. (Вам также лучше использовать более длинные и описательные имена переменных, чем aN
и am
.)
Самым быстрым ответом на ваш вопрос об обработке исключений было бы использование отдельных блоков try для отдельных действий, выполняемых методом, а именно: синтаксический анализ двух разных строк, выполнение транзакции, форматирование сообщения для пользователя и показ этого сообщение. Это позволило бы отделить обработку для FormatException
, брошенного int.Parse
от обработки для FormatException
, брошенного string.Format
.
Однако, как предлагает Арион, для анализа пользовательского ввода лучше использовать TryParse
, а не перехватывать исключения (ваша проблема с перехватом FormatException
является хорошим примером того, почему!). Это, конечно, предполагает, что вы используете версию платформы, в которой имеет методы TryParse
; они были добавлены в версии 2.0.