Что ж, int.TryParse возвращает bool, позволяющий вам проверить, был ли он успешным, вместо того, чтобы перехватывать исключение. Я обычно использую его в ситуациях, когда, если информация была успешно переведена, я хочу ее использовать, но если нет, это не важно, я могу игнорировать сбой, поскольку хочу использовать значение по умолчанию, если не получаю значимого значение, в этом случае я переопределю его, но если значение не имеет смысла, я сохраню значение по умолчанию.
Теория гласит, что исключения по своей природе дороги, и поэтому вы не должны использовать их, чтобы диктовать ход программы. Вы должны ловить их там, где что-то семантически неверно, а не то, что может интерпретироваться как поток данных.