#c# #parsing
#c# #синтаксический анализ
Вопрос:
Я пытаюсь преобразовать строку из текстового поля в int, но каждый найденный в Google ответ, который я нашел, по-прежнему возвращает ту же ошибку;
Система.Исключение FormatException: «Входная строка была в неправильном формате».
мой код просто:
private void btnSave_Click(object sender, RoutedEventArgs e)
{
int age = Int32.Parse(txtAge.Text);
if (string.IsNullOrWhiteSpace(txtAge.Text))
{
txtAge.Clear();
MessageBox.Show("Age cannot be blank");
}
else if(age < 0 || age > 100)
{
txtAge.Clear();
MessageBox.Show("Age must be within rage 0-100");
}
}
Любая помощь была бы очень признательна, поскольку я чувствую, что это простая ошибка, которую нужно исправить, но я уже несколько часов смотрю на нее, ходя по кругу
Комментарии:
1. И какой пример ввода выдает эту ошибку?
2. Было бы гораздо разумнее, если
if (string.IsNullOrWhiteSpace(txtAge.Text))
бы блок проверки предшествовалParse
команде … в противном случае есть опасность, что вы попытаетесь разобрать пустую строку в целое число (что приведет к сбою именно с той ошибкой, о которой вы упомянули). Очевидно, что если вы собираетесь попытаться проверить правильность / полноту данных, вам нужно сделать это перед попыткой использовать указанные данные, иначе это немного бессмысленно!3. Единственная другая вещь, которая может вызвать указанную ошибку, — это ввод нецелых и непробельных данных в текстовое поле. Очевидно, мы не знаем, с каким значением вы его тестировали. P.S. вместо этого вы всегда можете использовать
TryParse
метод, который проверит достоверность данных без необходимости дополнительныхif
, а также учтет другие проблемные входные данные, а также просто пустоту. (Пробелы сами по себе не являются проблемой, если строка также содержит одно допустимое целое число — см. dotnetfiddle.net/XWjRml . )
Ответ №1:
Я ожидал бы увидеть что-то более похожее:
private void btnSave_Click(object sender, RoutedEventArgs e)
{
int age;
if (Int32.TryParse(txtAge.Text, out age))
{
if (age >= 0 amp;amp; age <= 100)
{
// ... do something with "age" in here ...
}
else
{
MessageBox.Show("Age must be within range 0-100");
}
}
else
{
MessageBox.Show("Invalid Age. Please enter a valid Age.");
}
}