int.解析负数会导致异常

问题描述 投票:0回答:2

这行代码:

int.Parse("-1");

当我在设备上运行它时,会出现 FormatException,提示“输入字符串的格式不正确”。在模拟器上运行得很好。我已经用一堆设备对此进行了测试,唯一能按预期工作(即返回值为 -1 的 int)的是运行 android 4.2.1 的 Samsung Galaxy Nexus。所有这些设备都会产生异常:

  • 谷歌 Nexus 7 (4.3)
  • 三星S3(4.1.2)
  • 三星 Galaxy Tab (4.0.4)
  • LG P970 (2.2.2)
  • HTC Sensation (2.3.4)

我也尝试从设备上的Playstore下载应用程序C#Shell,然后输入上面的行,结果是相同的:

C#Shell screenshot

有谁知道为什么会发生这种情况,或者可以采取什么措施来解决这个问题?

更新:

我调查这个问题的原因是因为我们的应用程序正在从我们的服务器请求 JSON,并且它包含一堆负数。然后我们使用 ServiceStack 来解析 JSON,这会导致所有负数都变成 0。ServiceStack 无法设置 FormatSpecifier。

int.Parse("-1", CultureInfo.InvariantCulture)
似乎可以在所有设备上按预期工作,无论使用什么语言,但
int.Parse("-1", new CultureInfo("sv-SE"))
则不然。

我觉得这有点奇怪,因为

int.Parse("-1", new CultureInfo("sv-SE"))
适用于我们不使用 xamarin 或 mono 的其他平台。

c# xamarin.android xamarin
2个回答
1
投票

我最终对 ServiceStack 进行了修复:

https://github.com/ServiceStack/ServiceStack.Text/pull/365

更新:

现在 Xamarin 也修复了它:

https://bugzilla.xamarin.com/show_bug.cgi?id=14185


0
投票

对于任何想知道如何操作的未来读者,这里是代码:

// Assuming that Err Code 1 is Success.

if (int.TryParse("-1", NumberStyles.Integer, CultureInfo.InvariantCulture, out int errCode) && errCode == 1)
{
    return "Success";
}
else
{
    return "Err Msg";
}

这是一个文化问题,正如这篇 github 帖子

中提到的

有些文化使用的负号略有不同。 如果将区域性更改为 CultureInfo.InvariantCulture,则解析有效。

© www.soinside.com 2019 - 2024. All rights reserved.