xamarin int.分析负数会导致异常

4zcjmb1e  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(84)

这一行代码:

int.Parse("-1");

字符串
当我在设备上运行它时,会导致一个异常,说“Input string was not in the correct format”。在模拟器上,它工作得很好。我已经用一堆设备测试了这个,唯一一个按预期工作的(即返回一个int值为-1)是三星Galaxy Nexus,运行Android 4.2.1。所有这些设备都会生成一个异常:

  • 谷歌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,并输入上面的行,结果是一样的:
x1c 0d1x的数据
有人知道为什么会发生这种情况,或者可以做些什么来解决这个问题?

更新:

我调查这个问题的原因是因为我们的应用程序从我们的服务器请求JSON,它包含一堆负数。然后我们使用ServiceStack解析JSON,这导致所有负数都变成0。ServiceStack无法设置一个JSON Specifier。
int.Parse("-1", CultureInfo.InvariantCulture)似乎在所有设备上都能正常工作,不管它们使用的是什么语言,但int.Parse("-1", new CultureInfo("sv-SE"))不是。
我觉得这有点奇怪,因为int.Parse("-1", new CultureInfo("sv-SE"))可以在其他平台上工作,而我们没有使用xamarin或mono。

mwngjboj

mwngjboj2#

对于任何未来的读者,如果你正在使用英语以外的其他语言,并想知道如何做到这一点,这里是代码:

// 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,则分析将正常工作。

相关问题