C # Преобразование строки в Int из текстового поля

#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.");
    }
}