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

时间:2015-10-03 12:09:23

标签: c# parsing

我正在制作一个猜谜游戏,程序生成一个0到10的随机数,用户试图猜测它。 我希望用户在文本区域中输入一个整数。 然后我将输入转换为整数。问题出现了: 如果输入是不可转换的字符串,我该怎么办?像“asdf”。我希望程序输出“我问了一个数字!!而不是单词dumbass!” 但是C#甚至会将“Aadsda”这样的东西转换成0 ..我该怎么办?

这就是我的尝试:

let findCustomerId fname lname email = 
    let (==) (a:string) (b:string) = a.ToLower() = b.ToLower()
    let validFName name (cus:customer) =  name == cus.firstname
    let validLName name (cus:customer) =  name == cus.lastname
    let validEmail email (cus:customer) = email == cus.email
    let allCustomers = Data.Customers()
    let tryFind pred = allCustomers |> Seq.tryFind pred
    tryFind (fun cus -> validFName fname cus && validEmail email cus && validLName lname cus)
    |> function 
        | Some cus -> cus.id
        | None -> tryFind (fun cus -> validFName fname cus && validEmail email cus)
                  |> function
                    | Some cus -> cus.id
                    | None -> tryFind (fun cus -> validEmail email cus)
                              |> function
                                | Some cus -> cus.id 
                                | None -> createGuest() |> fun cus -> cus.id

6 个答案:

答案 0 :(得分:2)

if(int.TryParse(textBox_Guess.Text, out guess)){
    //successfully parsed, continue work
}
else {
    //here you can write your error message.
}

答案 1 :(得分:2)

TryParse返回一个布尔值。使用布尔值,您可以决定是否已成功解析。

if(int.TryParse(..)
{
      //If parsed sucessfully
}
else
{
      //Wasn't able to parse it
}

答案 2 :(得分:2)

使用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();
}

答案 3 :(得分:1)

您可以按如下方式更改代码:

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();
    }
}

答案 4 :(得分:0)

使用int.Parse()代替int.TryParse(),然后您将获得例外:

  

int.Parse 方法是严格的。如果字符串无效,则会抛出一个   出现FormatException。我们可以使用try-catch构造来捕获它。

     

但是:使用int.TryParse方法通常是更好的解决方案。 TryParse更快,它是一种解析整数的方法是int.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;
}

答案 5 :(得分:0)

如果要处理异常,则不需要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
}