防止将无效字符串转换为整数

本文关键字:转换 整数 字符串 无效 | 更新日期: 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;
}