使用double.TryParse
. 如果用户输入无效格式,这确保不会引发异常。根据解析的成功将其包装在一个循环中。
bool valid = false;
double amount;
while (!valid)
{
Console.WriteLine("How much would you like to transfer?");
valid = double.TryParse(Console.ReadLine(), out amount);
}
您将需要为负值添加额外的验证:
bool valid = false;
double amount;
while (!valid)
{
Console.WriteLine("How much would you like to transfer?");
valid = double.TryParse(Console.ReadLine(), out amount)
&& amount > 0;
}
C# 仅处理确定输出所需的表达式部分。所以在上面的例子中,如果double.TryParse(...)
返回 false,amount > 0
将不会被评估,因为false && anything == false
.
double.Parse
如果值不是有效的双精度值,将抛出异常。如果double.TryParse
在您的 .NET 版本中不可用,您可以像这样编写自己的:
public bool TryParse(string value, out double output)
{
output = 0;
try
{
double = double.Parse(value);
}
catch (Exception ex)
{
return false;
}
}
如果您希望以下尝试使用不同的消息,您可以将其稍微重写为:
double amount;
Console.WriteLine("How much would you like to transfer?");
bool valid = double.TryParse(Console.ReadLine(), out amount)
&& amount > 0;
while (!valid)
{
Console.WriteLine("Please enter a valid amount to transfer?");
valid = double.TryParse(Console.ReadLine(), out amount)
&& amount > 0;
}
这可以重构为:
void Main()
{
double amount = GetAmount();
}
double GetAmount()
{
double amount = 0;
bool valid = TryGetAmount("How much would you like to transfer?", out amount);
while (!valid)
{
valid = TryGetAmount("Please enter a valid amount to transfer?", out amount);
}
return amount;
}
bool TryGetAmount(string message, out double amount)
{
Console.WriteLine(message);
return double.TryParse(Console.ReadLine(), out amount)
&& amount > 0;
}