c# - 在 C# 中验证 readline 输入的最佳方法?

标签 c# readline verify

哦,有两件事: 1) 它是一个控制台应用程序。 2 ) 我知道它是丹麦语,但这并不重要,它只是一个要求输入的例子。文本和变量无关紧要。

好吧,考虑这个简单的输入: 它实际上可以是任何类型的输入问题。

Console.WriteLine("Hvad er dit kundenummer: (Kun hele tal tilladt)");
string inputKnr = Console.ReadLine();
kundenummer = Convert.ToInt16(inputKnr);

现在,如果客户输入错误怎么办?比如一封信。 try & catch 将确保应用程序不会中断,但这不是我想要的解决方案。 我想让它说你做错了,再试一次。 很经典吧?

但是解决这个解决方案的最佳方法是什么?我想到了这个:

bool fangetKundenummer = true;
while (fangetKundenummer)
{
Console.WriteLine("Hvad er dit kundenummer: (Kun hele tal tilladt)");
string inputKnr = Console.ReadLine();
try
{
    kundenummer = Convert.ToInt16(inputKnr);
    fangetKundenummer = false;
}
catch
{
    Console.WriteLine("Fejl. Prøv igen");
}
}

但这似乎不是正确的做法。

此外,顺便提一下,我正在玩的这个小应用程序有连续输入 4 个问题。这将意味着这个讨厌的 while() 循环的 4 次。

你也可以写一个函数。像这样的事情(没有理由以正确的方式去做,它只是为了说明一个概念):

static void verifyInput()
{
    try
    {
        Console.WriteLine("question");
        input = Console.ReadLine();
        kundenummer = Convert.ToInt16(input)
    }
    catch
    {
        Console.WriteLine("Wrong. Do it over");
        verifyInput(); //start the function all over
    }
}

但是您必须为每个输入问题编写一个函数,即使它们可能要求完全相同! (意思可能都是要求一个整数;但有不同的问题和变量)。

这似乎并不比 while() 解决方案好多少。

谁有好主意?

最佳答案

使用Int16.TryParse以及其他数字类型的等价物。所有这些都返回一个 bool 结果以指示解析成功或失败,并采用一个设置为解析结果的 out 参数(如果失败则为 0)。在您的情况下,您可能希望将调用包装在一个方法中以继续提示:

static Int16 PromptForInt16(string prompt)
{
    while (true)
    {
        Console.Write(prompt);
        Int16 result;
        if (Int16.TryParse(Console.ReadLine(), out result))
        {
            return result;
        }
        Console.WriteLine("Sorry, invalid number entered. Try again.");
    }
}

关于c# - 在 C# 中验证 readline 输入的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/503383/

相关文章:

php - 预填充的阅读行

ruby-on-rails - rails 控制台 - 没有要加载的文件 - readline(LoadError)[ubuntu 11.10]

c# - 无法附加分离的实体(具有相同键的实体已经在上下文中)

c# - lucene.net 语音过滤器

c# - 如何根据键值对创建对象

bash - 如何在 Bash 中解除绑定(bind)并重新映射 C-w?

c# - WPF 隐藏滑轨

php - password_hash 输出的格式是什么?

php - password_verify 和 doveadm pw -t 如何在不加盐的情况下验证密码

Heroku 拒绝付款。支持找不到问题