Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用+;5是无效的,但5是?_C#_Integer_Error Checking - Fatal编程技术网

C# 如何使用+;5是无效的,但5是?

C# 如何使用+;5是无效的,但5是?,c#,integer,error-checking,C#,Integer,Error Checking,我的程序要求用户在中的文本框中输入1-10之间的数字。当用户输入数字时,我使用以下方法将其转换为int: if (!int.TryParse(inputBox.Text, out input)) 我用了因为如果数字不能TryParse'd转换为整数,则会向用户抛出错误 这是有效的,直到我输入一个以+开头的数字,例如+5或+1。它没有捕捉到在int前面有一个+的事实。如果我输入了多个+,它会抛出一个错误 有人会如何制作一行防错代码来检查这种类型的输入?您可以在运行时从文本框中删除+,或检查+字符

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

if (!int.TryParse(inputBox.Text, out input))
我用了
因为如果数字不能
TryParse
'd转换为整数,则会向用户抛出错误

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


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

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

if (inputBox.Text.Contains("+"))
{
    // throw or show message
    return;
}
if (!int.TryParse(inputBox.Text, out input))
{
}
如果您想在按下时显示弹出窗口,您可以在textbox TextChangeEvent中选中上述条件,
或者使用按键事件来限制输入。

我想您应该允许1-10不带正号(+)


但我觉得这个要求真的很奇怪。“+10”被视为与“10”相同,它是一个有效的输入。

存在
Int32的重载。TryParse
接受
numberstyle
值和
IFormatProvider
-

Int32.TryParse
使用的默认值是
NumberStyles.Integer
,它允许前导和尾随空格以及前导符号


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

所以您是说字符串“+5”成功解析为int,对吗?是的,但它去掉了+,我需要一些东西在捕获它之前向用户抛出一个错误,这是因为字符串“+5”已成功解析为整数值5。你的问题是什么?为什么+5成功解析。是的,但这不在我希望用户输入的参数范围内。这样做很好,但在这种情况下,我不希望它像那样工作。我希望它抛出一个错误。这很好,但我希望它向用户抛出一个错误。@BryanOlesky不客气,请将其标记为解决方案。对不起,我正在将上面的答案作为答案。它更深入。无论如何,谢谢你,我将把它添加到我的心智库中。@BryanOlesky你在哪里显示接受答案中的信息?因为你上面提到过,你想让Meesage知道我比我见过的任何东西都更喜欢这个。我知道这是一个集市,我正在努力做到这一点,这样代码中就不会出现问题。是的,它仍然是一个有效的输入,但是因为它不在我想要的参数范围内,所以我需要它抛出一个用户端错误。谢谢大家!@巴扎是一个封闭的市场@BryanOlesky,尽管这回答了你的确切问题,但是考虑Preston Guillot的回答——接受<代码> -5 < /代码>是非常奇怪的,但是拒绝<代码> + 5 < /代码>。
int number;
var input = numberTextBox.Text;
if (!input.StartsWith("+") && int.TryParse(input, out number))
{
    //valid input, check if it's between 1-10
}