[英]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.MaxValue
和int.MinValue
的BigInteger
表示形式进行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.