Самая большая проблема с вашим текущим методом проверки ввода состоит в том, что оператор CDec
не возвращает ошибку, когда преобразование завершается неудачно. Вы компенсируете это, проверяя, было ли введенное значение преобразовано в 0, но это означает, что вы увидите грубое сообщение об ошибке, если они введут 0
, что на самом деле является действительным значением температуры!
Таким образом, вместо оператора CDec
вы, вероятно, захотите переключиться на использование Decimal.TryParse
метода , который имеет преимущество, заключающееся в отделении успеха / неудачи от фактического преобразованного значения.
Простая перегрузка этого метода принимает только два параметра: строковое значение, которое вы хотите преобразовать (в вашем случае, как возвращено методом Console.ReadLine()
) и ссылку (в терминах VB.NET). , значение, которое передается ByRef
) в переменную типа Decimal
, которая будет заполнена результатом преобразования, если оно прошло успешно. Функция возвращает значение Boolean
, которое указывает на успех или неудачу.
Вы могли бы избежать использования этой простой перегрузки, но, вероятно, «лучше» использовать несколько более сложную версию , потому что она позволяет вам указать культуру, которая будет использоваться при попытке проанализировать указанное значение. Поскольку некоторые культуры используют точки (.
) в качестве десятичного разделителя, а другие используют запятую (,
), это необходимо для применения, не зависящего от культуры. Это может быть слишком перспективным в вашем случае, однако. : -)
Помимо исправления этой непосредственной проблемы, было бы также лучше заменить ваши операторы If
/ Else If
на цикл While
. Таким образом, он будет работать снова и снова, пока пользователю не удастся ввести правильный номер. Это не только дает пользователю столько возможностей, сколько ему нужно, но и избавляет вас от необходимости дублировать код внутри обоих блоков If
.