正整数的 tryparse 方法不返回非整数输入的错误
tryparse method for positive integer is not returning an error with inputs that are not integers
我有以下代码:
int orderQuantity;
Write("Number of Items: \t");
while(int.TryParse(ReadLine(), out orderQuantity) && orderQuantity > 0 == false)
{
Write("Error: Number of Items must be a positive, whole number: \t");
int.TryParse(ReadLine(), out orderQuantity);
}
目标是在输入不是正整数的同时,继续return报错。一旦输入为正整数,继续。
问题是这个逻辑只适用于负数。当我尝试将代码变成 while(!int.TryParse(ReadLine(), out orderQuantity) && orderQuantity > 0 == false)
我 运行 进入代码,无法将整数或负数识别为错误。
while((!int.TryParse(ReadLine(), out orderQuantity)) || (orderQuantity <= 0))
使用:
while(!int.TryParse(ReadLine(), out orderQuantity) || orderQuantity <= 0)
{
Write("Error: Number of Items must be a positive, whole number: \t");
}
所以你必须分别处理它不是有效整数和有效但不大于零的情况。还要从循环体中删除 TryParse
。
您需要将条件括起来,这样:
int.TryParse(ReadLine(), out orderQuantity) && orderQuantity > 0 == false
改为:
(int.TryParse(ReadLine(), out orderQuantity) && orderQuantity > 0) == false
扩展方法可能会帮助您获得更具表现力并因此更易于阅读的代码:
public static class StringExtensions
{
public static bool IsPositiveInt32(this string input, out int value)
{
if(!int.TryParse(input, out value))
{
return false;
}
return value > 0;
}
}
用法将是
int orderQuantity;
Write("Number of Items: \t");
while(!ReadLine().IsPositiveInt32(out orderQuantity))
{
Write("Error: Number of Items must be a positive, whole number: \t");
}
我有以下代码:
int orderQuantity;
Write("Number of Items: \t");
while(int.TryParse(ReadLine(), out orderQuantity) && orderQuantity > 0 == false)
{
Write("Error: Number of Items must be a positive, whole number: \t");
int.TryParse(ReadLine(), out orderQuantity);
}
目标是在输入不是正整数的同时,继续return报错。一旦输入为正整数,继续。
问题是这个逻辑只适用于负数。当我尝试将代码变成 while(!int.TryParse(ReadLine(), out orderQuantity) && orderQuantity > 0 == false)
我 运行 进入代码,无法将整数或负数识别为错误。
while((!int.TryParse(ReadLine(), out orderQuantity)) || (orderQuantity <= 0))
使用:
while(!int.TryParse(ReadLine(), out orderQuantity) || orderQuantity <= 0)
{
Write("Error: Number of Items must be a positive, whole number: \t");
}
所以你必须分别处理它不是有效整数和有效但不大于零的情况。还要从循环体中删除 TryParse
。
您需要将条件括起来,这样:
int.TryParse(ReadLine(), out orderQuantity) && orderQuantity > 0 == false
改为:
(int.TryParse(ReadLine(), out orderQuantity) && orderQuantity > 0) == false
扩展方法可能会帮助您获得更具表现力并因此更易于阅读的代码:
public static class StringExtensions
{
public static bool IsPositiveInt32(this string input, out int value)
{
if(!int.TryParse(input, out value))
{
return false;
}
return value > 0;
}
}
用法将是
int orderQuantity;
Write("Number of Items: \t");
while(!ReadLine().IsPositiveInt32(out orderQuantity))
{
Write("Error: Number of Items must be a positive, whole number: \t");
}