我正在制作一个猜谜游戏,程序生成一个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
答案 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
}