我正在编写一个程序,其中一个特点是:不会因为数据输入与接收数据的变量类型不同而发生错误。因此,我知道如何允许用户在提示下只输入一种数据类型。我已经知道如何使用try-catch
,但我不想使用它。
编辑:
用户必须只输入浮动类型值
请给我举个例子
由于所有命令行参数都是字符串,因此只能解析它们。如果您期望一个浮动值,您可以执行以下操作:
float f;
bool success = Float.TryParse(parameter, out f);
if(success)
{
....
}
else
{
....
}
如果TryParse成功,则现在将该值分配给f。否则,f==0.0。
类似的东西
string usrInput = Console.ReadLine();
while(!isValid(usrInput))
{
Console.Write("Invalid Input. Enter a valid value");
usrInput = Console.ReadLine();
}
//continue to use input here
编写您的有效函数
private void isValid(string input)
{
//use regex
//use something else
//if test passed return true
//return false
}
控制台只读取文本。如果你想确保用户只输入给定类型的数据,我建议你创建通用方法,例如GetDate(),它使用TryParse方法并循环,直到用户输入一个可以解析为该类型的字符串。
您必须使用自己的命令转义策略,这样它才能将转义一直反馈到调用GetDate()的方法,让它知道用户转义了。
不需要try-catch块的最简单方法是尝试解析输入,并根据输入是否成功解析来做出控制流决策。例如,当用户输入而不是成功解析时,您可以不断要求有效输入:
float myValue;
do
{
Console.WriteLine("Enter a valid value: ");
} while (!Float.TryParse(Console.ReadLine(), out myValue))
// myValue contains a valid float, do something with it now...
float percent = myValue / 100.0f;
所有.NET的数字类型都包括一个TryParse
方法,因此如果您有其他输入类型,您可以相应地更改示例(Integer.TryParse()
、Double.TryParse()
等)。