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

How do I parse an integer, using the rule that +5 is not valid but 5 is?

我的程序要求用户在文本框中输入 1 - 10 之间的数字。当我输入数字时,我将其转换为 int,方法是:

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

我使用了 !,因为如果不能将数字 TryParse 转换为 int,则会向用户抛出错误。

这有效,直到我输入以 + 开头的数字,例如 +5+1。它没有捕捉到 int 前面有一个 + 的事实。如果我输入多个 +,它会像应该的那样抛出一个错误。

有人会如何制作代码的防错行来检查此类输入?

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

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

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

我想你想允许 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),例如,returns false - 然而,对于 -5,它也是 returns false,因为包含前导符号的选项不会区分 +和 -。这是一个你可能也不应该的提示,“+5”是一个整数,就像“5”和“-5”一样。