带有前导零的int.Parse()

Tay*_*ese 13 .net c#

如何防止下面的代码抛出一个FormatException.我希望能够将前导零的字符串解析为整数.有干净的方法吗?

string value = "01";
int i = int.Parse(value);
Run Code Online (Sandbox Code Playgroud)

Mic*_*tta 19

你的代码为我运行,没有FormatException(一旦你正确地利用方法):

string value = "01";
int i = int.Parse(value);
Run Code Online (Sandbox Code Playgroud)

但这确实敲响了一个老钟; 我几年前遇到的一个问题,微软认为这是一个针对Windows(而不是.NET)本地化组件的错误.要测试您是否看到此内容,请运行此代码并告知我们您是否收到FormatException:

string value = "0"; // just a zero
int i = int.Parse(value);
Run Code Online (Sandbox Code Playgroud)

编辑:这是我在2007年从Usenet发布的帖子.看看症状是否与你的相符.

作为参考,这是我们发现的.受影响的计算机的注册表值[HKEY_CURRENT_USER\Control Panel\International\sPositiveSign]的数据不正确.通常,此值为空REG_SZ(以null结尾的字符串).在这种情况下,字符串缺少其终结符.这混淆了API函数GetLocaleInfoW(),导致它认为'0'(ASCII数字零)是当前语言环境的正号(通常应为'+').这造成了各种各样的破坏.

您可以使用regedit.exe自行验证:通过右键单击该值并选择"修改二进制数据"来打开该值.您应该在右侧看到两个点(表示空终止符).如果你看不到任何点,你就会受到影响.通过添加终结符(四个零)来修复它.

您还可以检查CultureInfo.CurrentCulture.NumberFormat.PositiveSign的值; 它应该是'+'.

这是Windows本地化API中的错误,而不是类库.需要检查reg值以获得终结符.他们正在看着它.

... 这是关于Microsoft Connect的关于此问题的报告:


Nic*_*rdi 7

尝试

int i = Int32.Parse(value, NumberStyles.Any);
Run Code Online (Sandbox Code Playgroud)


Joh*_*ner 5

int i = int.parse(value.TrimStart('0'));
Run Code Online (Sandbox Code Playgroud)