如何将字符串转换为整数并确定它是否小于Int32.MinValue或大于Int32.MaxValue?

时间:2011-08-08 14:53:17

标签: c# .net .net-4.0

我有以下代码试图确定给定字符串是否是有效整数。如果它是一个整数,但不在Int32的有效范围内,我需要特别知道它是否大于Int32.MaxValue或小于Int32.MinValue。

try
{
     return System.Convert.ToInt32(input);
}
catch (OverflowException)
{
     return null;
}
catch (FormatException)
{
     return null;
}

如果Convert.ToInt32不在可接受的值范围内,它将抛出OverflowException,但它会为大于和小于两者抛出相同的异常。有没有办法确定除了解析异常文本之外还有哪一个?

4 个答案:

答案 0 :(得分:9)

当您使用.NET 4时,可以使用BigInteger - 对其进行解析,然后将结果与BigIntegerint.MaxValue的{​​{1}}表示进行比较

但是,我建议您使用TryParse而不是捕获异常并将其用于流量控制。

答案 1 :(得分:3)

您可以将其转换为Int64(即long),然后自行进行比较。这也将消除作为控制流情况的异常。

答案 2 :(得分:1)

有一种非常简单的方法可以知道抛出OverflowException的输入(或者如果你使用了TryParse则给出了false)是否大于Int32.MaxValue或小于Int32.MinValue:小于Int32.MinValue的数字将是否定的,所以它的字符串表示将以' - '开头!

答案 3 :(得分:0)

这个想法是:

bool isWrong = false;
bool isLarge = false;
if (!Int32.TryParse(rawValue, out int32Holder))
{
      if (!Int64.TryParse(rawValue, out int64Holder))
      {
           isWrong = true;
      }
      else
      {
           isLarge = true;
      }
}