当我尝试将字符串转换为 int 时,为什么 TryParse() 不起作用?
Why won't TryParse() work when I try to convert a string to an int?
我是初学者,作业涉及结构,我也在用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
}
您需要在 TryParse
方法
中声明要用作 out
参数的那些变量
在你的例子中你使用了 out day
和 out year
但你需要告诉编译器 day
和 year
变量的类型是什么。
您可以使用三元运算符,如果您的输入成功解析然后它 return 将值解析为 user.day
和 user.year
否则只是 returns 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
}
int.TryParse 方法 尝试 将字符串解析为 int
。它可能会失败。所以它 而不是 return 而 int
。它 return 是一个 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);
我可以给你代码,但最好的解决办法是使用你不需要验证的控件。在 TextBox 中输入一天是如此 1990 年代。
我最好推荐一个绑定到 DateTime theDate { get; set; }
字段的日历控件。
我是初学者,作业涉及结构,我也在用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
}
您需要在 TryParse
方法
out
参数的那些变量
在你的例子中你使用了 out day
和 out year
但你需要告诉编译器 day
和 year
变量的类型是什么。
您可以使用三元运算符,如果您的输入成功解析然后它 return 将值解析为 user.day
和 user.year
否则只是 returns 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
}
int.TryParse 方法 尝试 将字符串解析为 int
。它可能会失败。所以它 而不是 return 而 int
。它 return 是一个 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);
我可以给你代码,但最好的解决办法是使用你不需要验证的控件。在 TextBox 中输入一天是如此 1990 年代。
我最好推荐一个绑定到 DateTime theDate { get; set; }
字段的日历控件。