当前位置:  开发笔记 > 编程语言 > 正文

在C#中验证readline输入的最佳方法是什么?

如何解决《在C#中验证readline输入的最佳方法是什么?》经验,为你挑选了1个好方法。

哦,2件事: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()解决方案好多少.

有没有人有一个聪明的主意?



1> Jon Skeet..:

使用Int16.TryParse和其他数字类型的等价物.所有这些都返回一个布尔结果来指示解析成功或失败,并获取一个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.");
    }
}

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有