繁体   English   中英

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

[英]How to convert string to integer and determine if it's less than Int32.MinValue or greater than Int32.MaxValue?

我有以下一段代码,试图确定给定的字符串是否为有效整数。 如果它是整数,但不在Int32的有效范围内,则需要具体了解它是大于Int32.MaxValue还是小于Int32.MinValue。

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

如果Convert.ToInt32不在可接受的值范围内,则它将引发OverflowException,但对于大于和小于的情况,它将引发相同的异常。 除了解析异常文本之外,是否有办法确定它是哪一个?

在使用.NET 4时,可以使用BigInteger解析,然后将结果与int.MaxValueint.MinValueBigInteger表示形式进行int.MinValue

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

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

有一种非常简单的方法来知道引发OverflowException的输入(如果使用TryParse则为false)是否大于Int32.MaxValue或小于Int32.MinValue:小于Int32.MinValue的数字将为负数,因此其字符串表示形式将以'-'开头!

这个想法是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM