防止将无效字符串转换为整数
本文关键字:转换 整数 字符串 无效 | 更新日期: 2023-09-27 18:16:02
我正在制作一个猜谜游戏,其中程序生成一个从0到10的随机数,用户尝试猜测它。我希望用户在文本区域输入一个整数。然后我把输入转换成整数。问题来了:如果输入是一个不可转换的字符串,我该怎么做?像"asdf"。我希望程序输出"我要一个数字!!"不是一个字,笨蛋!"但是c#甚至会将"adsda"转换为0…我该怎么办?
这是我尝试过的:
private void button1_Click(object sender, EventArgs e)
{
try
{
int.TryParse(textBox_Guess.Text, out guess);
//IF STATEMENTS TO CHECK HOW CLOSE THE USER'S GUESS IS
}
catch (Exception)
{
//Since all strings are converted, this block is never executed
label_Reveal.ForeColor = System.Drawing.Color.Red;
label_Reveal.Text = "Your input is invalid!";
label_Reveal.Show();
}
}
if(int.TryParse(textBox_Guess.Text, out guess)){
//successfully parsed, continue work
}
else {
//here you can write your error message.
}
TryParse返回布尔值。使用布尔值,您可以决定它是否被成功解析。
if(int.TryParse(..)
{
//If parsed sucessfully
}
else
{
//Wasn't able to parse it
}
使用TryParse等函数的TryXYZ模式试图在将字符串解析为其他类型时避免依赖异常。更合适的函数用法可以这样实现:
var guessString = textBox_Guess.Text;
int guessParsed;
var success = int.TryParse(guessString, out guessParsed);
if(!success) {
label_Reveal.ForeColor = System.Drawing.Color.Red;
label_Reveal.Text = "Your input is invalid!";
label_Reveal.Show();
}
你可以这样修改你的代码:
private void button1_Click(object sender, EventArgs e)
{
int num;
bool guessCorrect = int.TryParse(textBox_Guess.Text, out num);
if(!guessCorrect){
label_Reveal.ForeColor = System.Drawing.Color.Red;
label_Reveal.Text = "Your input is invalid!";
label_Reveal.Show();
}
}
你不需要int.TryParse
,使用int.Parse
,如果你想处理异常:
void button1_Click(object sender, EventArgs e)
{
try
{
guess = int.Parse(textBox_Guess.Text);
}
catch (Exception)
{
label_Reveal.ForeColor = System.Drawing.Color.Red;
label_Reveal.Text = "Your input is invalid!";
label_Reveal.Show();
}
}
或者,如果你喜欢TryParse
,那么在if语句中处理它,像这样:
if(!int.TryParse(textBox_Guess.Text, out guess))
{
// manage parsing error here
}
使用int.Parse()
代替int.TryParse()
,那么您将得到异常:
int。Parse方法严格。对于无效字符串,它将抛出FormatException。我们可以使用try-catch构造来捕获这个错误。
But:TryParse方法通常是更好的解决方案。TryParse更快,它是一种解析整数的方法。TryParse方法。TryParse中的解析逻辑是相同的。但是我们称呼它的方式是不同的。
如果你对int.Parse()
没有意见,那么你可以使用下面的
try
{
guess=int.Parse(textBox_Guess.Text);
}
catch
{
label_Reveal.ForeColor = System.Drawing.Color.Red;
label_Reveal.Text = "Your input is invalid!";
label_Reveal.Visible = true;
}
或者你应该使用TryParse with if
,如下所示:
if(!int.TryParse(textBox_Guess.Text, out guess))
{
label_Reveal.ForeColor = System.Drawing.Color.Red;
label_Reveal.Text = "Your input is invalid!";
label_Reveal.Visible = true;
}