Почему не работает TryParse (), когда я пытаюсь преобразовать строку в int? - PullRequest
1 голос
/ 27 апреля 2019

Я - начинающий студент, и у меня есть домашнее задание, включающее структуры, я также использую Visual Studio 2017.

Я создал структуру и теперь пытаюсь назначить входные данные из текстового поля дляполе экземпляра созданной структуры.Я пытаюсь назначить строку из текстового поля полю типа int из созданной мной структуры.

Когда я пытаюсь преобразовать строку из текстового поля с помощью метода TryParse (), он нене работаетVS говорит мне, что имя «varName» не существует в текущем контексте.Что это значит?Как я могу решить эту проблему?

     enum Month
        {
            January, February, March, April, May, June, July, August, September, October, November, December
        }

        struct Person
        {
            public string name;

            public string jobTitle;

            public Month month;

            public int day;

            public int year;
        }

        private void submitButton_Click(object sender, EventArgs e)
        {

            Month month = (Month)Enum.Parse(typeof(Month), monthDropDown.Text);
            Person user;

            user.name = nameTextBox.Text;
            user.jobTitle = jobTitleTextBox.Text;
            user.month = month;
            user.day = int.TryParse(dayTxtBox.Text, out day); //here I'm trying to use the TryParse method but it gives me the error the name 'day' doesn't exist in the current context
            user.year = int.TryParse(yearTextBox.Text, out year); //here I'm trying to use the TryParse method but it gives me the error the name 'year' doesn't exist in the current context
        }

Ответы [ 3 ]

3 голосов
/ 27 апреля 2019

Метод int.TryParse пытается проанализировать строку в int.Это может потерпеть неудачу.Так что не возвращает int.Он возвращает bool, чтобы указать, действительно ли синтаксический анализ завершился успешно.Поэтому вы должны быть готовы к тому, что результат не будет использоваться как int:

if(int.TryParse(dayTxtBox.Text, out var day))
{
    user.day = day;
}
else
{
    /// put code here to handle what should happen if user entered "hello" for example
}

В качестве альтернативы, если это домашняя работа и некоторые из этих понятий еще не были рассмотрены в вашем курсе, вы могли быупростить его и предположить, что пользователь никогда не делает ошибок и всегда вводит правильный номер (предупреждение: не сценарий из реальной жизни):

user.day = int.Parse(dayTxtBox.Text);
1 голос
/ 27 апреля 2019

Вам нужно объявить переменную, которую вы хотите использовать в качестве параметра out в TryParse методе

В вашем случае вы использовали out day и out year, но вам нужно сообщить компилятору, чтопеременные day и year имеют тип.

Вы можете использовать троичный оператор, если ваш входной сигнал успешно проанализирован, тогда он возвращает проанализированное значение в user.day, а user.year в противном случае просто возвращает 0.

user.day = int.TryParse(dayTxtBox.Text, out int day) ? day : 0;
user.year = int.TryParse(yearTextBox.Text, out int year) ? year : 0;

Или проще с блоком if....else,

if (int.TryParse(dayTxtBox.Text, out int day))
{
    user.day = day;
}
else
{
    user.day = 0; //Or set any value whatever you want when parsing fail
}
0 голосов
/ 27 апреля 2019

Я мог бы дать вам код, но лучшее решение - использовать элемент управления, который вам не нужно проверять.Ввод текста в TextBox - это 1990-е годы.

Лучше всего рекомендовать элемент управления календаря, привязанный к полю DateTime theDate { get; set; }.

...