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

本文关键字:异常 NumberStyles 选择 AllowThousands 为什么 | 更新日期: 2023-09-27 17:59:13

我调用以下两行。第二行崩溃。:

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

但是,如果我将值修改为不包含","字符并删除NumberStyles枚举,它就可以工作了。例如

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

我做错什么了吗?这是一个已知的问题吗?有没有一种可以接受的方法不涉及棘手的字符串操作?

edit我应该提到的异常是System.FormatException,"输入字符串的格式不正确。"

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

对于第二个示例,由于在字符串中使用了NegativeSign,因此也需要使用AllowLeadingSign

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

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

来自参考来源;

Integer  = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign,