我有以下代码试图确定给定字符串是否是有效整数。如果它是一个整数,但不在Int32的有效范围内,我需要特别知道它是否大于Int32.MaxValue或小于Int32.MinValue。
try
{
return System.Convert.ToInt32(input);
}
catch (OverflowException)
{
return null;
}
catch (FormatException)
{
return null;
}
如果Convert.ToInt32不在可接受的值范围内,它将抛出OverflowException,但它会为大于和小于两者抛出相同的异常。有没有办法确定除了解析异常文本之外还有哪一个?
答案 0 :(得分:9)
当您使用.NET 4时,可以使用BigInteger
- 对其进行解析,然后将结果与BigInteger
和int.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;
}
}