如何解析整数,使用+5无效而5有效的规则
本文关键字:有效 规则 无效 何解析 整数 使用 | 更新日期: 2023-09-27 18:10:14
我的程序要求用户在文本框中输入1 - 10中的一个数字。当用户输入数字时,我使用以下命令将其转换为int
:
if (!int.TryParse(inputBox.Text, out input))
我使用!
,因为如果数字不能是TryParse
'd到int,它会向用户抛出错误。
在输入以+
开头的数字(例如+5
或+1
)之前,此操作有效。它没有抓住的事实,有一个+
在int
前面。如果我输入了多个+
,它会抛出一个错误。
如何编写防错行代码来检查这种类型的输入?
我想你应该允许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文本框中检查上述条件。或者使用按键事件来限制输入