提问人:Aitor Gallego 提问时间:9/28/2023 更新时间:9/28/2023 访问量:86
当我得到一个不是数字的输入时,我该如何发送和错误?[C#]
How can I send and error when I get an input that is not a number? [C#]
问:
我希望在客户端写入符号或字母时出现错误
int n = 0;
string ent;
ent = Console.ReadLine();
n = int.Parse(ent);
if (n.GetType() != typeof(int)) {
Console.WriteLine("Must be a number");
}
答:
0赞
Raphael
9/28/2023
#1
看看官方文档和示例用法:
按照官方文档中的建议将 包装在 try-catch 块中,或者在此处使用。int.Parse
int.TryParse()
尝试 catch 示例:
int n = 0;
string ent;
ent = Console.ReadLine();
try {
n = int.Parse(ent);
} catch (FormatException) {
Console.WriteLine("{0}: Must be a number", ent);
}
评论
2赞
MakePeaceGreatAgain
9/28/2023
在显示示例代码的两个选项中,您应该明确选择第二个选项,它不依赖于处理程序流的异常。
0赞
Raphael
9/28/2023
是的,我同意。我想鼓励他们阅读官方文档,因为总有一些例子。此外,try-catch 可能更容易理解。
1赞
Gustavo HK
9/28/2023
是的。尽管 TryCatch 有效,但这种情况是何时改用 TryParse 的一个很好的例子。
-2赞
Deepankar Joshi
9/28/2023
#2
您可以在字段中使用正则表达式进行所需的任何验证。
评论
1赞
MakePeaceGreatAgain
9/28/2023
有更好的内置方法来检查 inout 是否与 int 或其他内容匹配,这些方法不依赖于脆弱且易于破坏的正则表达式。无论如何,在没有任何示例代码的情况下,您的答案非常模糊,可能应该是评论。
0赞
Deepankar Joshi
9/28/2023
我并不是说这是实现这一目标的最好和唯一可能的方法。我说'可以'。希望你能更好地阅读它。
3赞
Phoenix
9/28/2023
#3
目前还不完全清楚您要做什么,但如果它能够解析输入,这将提示任何输入:
while ( true )
{
bool isValid = int.TryParse( Console.ReadLine(), out int parsedInput );
if ( !isValid )
{
Console.WriteLine( "Must be a number" );
continue;
}
Console.WriteLine( $"Your input was: {parsedInput}" );
}
请注意,此代码用于演示目的,使用所示的循环可能会导致意外行为。while
评论
0赞
Dmitry Bychenko
9/28/2023
你这里有一个无限循环,看来你想要break
Console.WriteLine( $"Your input was: {parsedInput}" );
0赞
Phoenix
9/29/2023
是的,这里的无限循环是有意为之的。玩的好起点。我不知道 OP 正在构建什么,他们可能不需要退出循环。也许他们甚至不需要这样的循环。
0赞
Gustavo HK
9/28/2023
#4
我认为一个好的解决方案是使用 int。TryParse。顾名思义,它尝试将给定值转换为 int 并返回布尔值 true 或 false,指示它是否成功。 它还接收一个 out 参数,如果转换顺利,将存储最终解析的值。 它看起来像这样:
int n = 0;
string ent;
bool validNumber = false;
while(!validNumber){
ent = Console.ReadLine();
if(int.TryParse(ent, out n))
{
validNumber = true;
}
else
{
Console.WriteLine("Must be a number");
}
}
我还添加了一个 while 循环以继续请求有效数字。
评论