当我得到一个不是数字的输入时,我该如何发送和错误?[C#]

How can I send and error when I get an input that is not a number? [C#]

提问人:Aitor Gallego 提问时间:9/28/2023 更新时间:9/28/2023 访问量:86

问:

我希望在客户端写入符号或字母时出现错误

int n = 0;
string ent;

ent = Console.ReadLine();
n = int.Parse(ent);

if (n.GetType() != typeof(int)) {
    Console.WriteLine("Must be a number");
}

C# visual-studio 语法错误 控制台应用程序

评论

0赞 Phoenix 9/28/2023
在 C# 中,除非您将其设置为动态,否则 n 不会更改其类型。因此,类型检查的计算结果将始终为 true。您可以尝试使用 int。TryParse() 返回布尔值,其中 'false' 表示它无法解析输入,可能是由于非数字输入。
0赞 Gustavo HK 9/28/2023
听起来你可以使用 int。TryParse (英语)

答:

0赞 Raphael 9/28/2023 #1

看看官方文档和示例用法:

按照官方文档中的建议将 包装在 try-catch 块中,或者在此处使用。int.Parseint.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
你这里有一个无限循环,看来你想要breakConsole.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 循环以继续请求有效数字。