正整数的 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");
}