[英]Best way to verify readline input in C#?
哦,有两件事:1)它是一个控制台应用程序。 2)我知道这是丹麦语,但这并不重要,它只是要求输入一些内容的示例。 文本和变量无关紧要。
好吧,考虑一下这个简单的输入:真的可能是任何形式的输入问题。
Console.WriteLine("Hvad er dit kundenummer: (Kun hele tal tilladt)");
string inputKnr = Console.ReadLine();
kundenummer = Convert.ToInt16(inputKnr);
现在,如果客户输入了错误的内容怎么办? 如信。 尝试并捕获将确保应用程序不会中断,但这不是我想要的解决方案。 我想说您做错了,请再试一次。 很经典吧?
但是解决该解决方案的最佳方法是什么? 我想到了这一点:
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和其他数字类型的等效项。 所有这些都返回一个布尔结果,以指示解析成功或失败,并采用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.");
}
}
您可以使用TryParse模式:
string s; // for "is not valid" message
short val; // final value
while(!short.TryParse(s=Console.ReadLine(), out val)) {
Console.WriteLine(s + " is not valid...");
}
只是出于某种变化,如何测试字符串本身而不是TryParse,这将需要额外的存储空间,并且可能不需要进行转换?
static void Main(string[] args)
{
var isFalse = "t".IsInt();
var isTrue = "123".IsInt();
var isAlsoFalse = "123.1".IsInt();
}
static bool IsInt(this IEnumerable<char> s)
{
return s.All(x => char.IsNumber(x));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.