如何解析整数,使用+5无效而5有效的规则

本文关键字:有效 规则 无效 何解析 整数 使用 | 更新日期: 2023-09-27 18:10:14

我的程序要求用户在文本框中输入1 - 10中的一个数字。当用户输入数字时,我使用以下命令将其转换为int:

if (!int.TryParse(inputBox.Text, out input))

我使用!,因为如果数字不能是TryParse 'd到int,它会向用户抛出错误。

在输入以+开头的数字(例如+5+1)之前,此操作有效。它没有抓住的事实,有一个+int前面。如果我输入了多个+,它会抛出一个错误。

如何编写防错行代码来检查这种类型的输入?

如何解析整数,使用+5无效而5有效的规则

我想你应该允许1-10没有正号

int number;
var input = numberTextBox.Text;
if (!input.StartsWith("+") && int.TryParse(input, out number))
{
    //valid input, check if it's between 1-10
}

但是我认为这个要求真的很奇怪。"+10"被认为和"10"是一样的,它是一个有效的输入。

Int32.TryParse超载,接受NumberStyles值和IFormatProvider值。——https://msdn.microsoft.com/en-us/library/zf50za27 (v = vs.110) . aspx

Int32.TryParse默认使用的是NumberStyles.Integer,它允许前后空白和前导符号。

例如,

int.TryParse("+5", NumberStyles.None, NumberFormatInfo.InvariantInfo, out x)返回false—但是,对于-5,它也返回false,因为包含前导符号的选项不区分+和-。这是一个提示,你可能也不应该这样做,"+5"的每一位都是整数,就像"5"answers"-5"一样。

您可以在运行时从textBox中删除+或检查+字符,如下面的代码所示

if (inputBox.Text.Contains("+"))
{
    // throw or show message
    return;
}
if (!int.TryParse(inputBox.Text, out input))
{
}

如果你想在按下时显示弹出窗口,你可以在TextChangeEvent文本框中检查上述条件。或者使用按键事件来限制输入