为什么NumberStyles.AllowThousands在传递负数时会导致异常?

时间:2015-06-24 05:14:33

标签: c#

我打电话给以下两行。第二行崩溃了。:

var a = long.Parse("2147483648");
var b = long.Parse("-2147483648");

但是,如果我将值修改为没有','字符并删除NumberStyles枚举,则它可以工作。 e.g。

System.FormatException

我做错了吗?这是一个已知的问题?是否存在可接受的解决方法,不涉及hacky字符串操作?

编辑我应该提到异常是<aside>,“输入字符串的格式不正确。”

1 个答案:

答案 0 :(得分:7)

对于第二个示例,您需要使用AllowLeadingSign,因为您在字符串中使用NegativeSign

var b = long.Parse("-2,147,483,648",
                   NumberStyles.AllowThousands | NumberStyles.AllowLeadingSign);

当您使用long.Parse(string) overload时,此方法使用NumberStyles.Integer复合样式,包含AllowLeadingSign本身。

来自reference source;

Integer  = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign,