这一行代码:
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。
2条答案
按热度按时间i7uaboj41#
我最终提交了一个修复ServiceStack:
https://github.com/ServiceStack/ServiceStack.Text/pull/365
更新:
现在Xamarin也修复了它:
https://bugzilla.xamarin.com/show_bug.cgi?id=14185的
mwngjboj2#
对于任何未来的读者,如果你正在使用英语以外的其他语言,并想知道如何做到这一点,这里是代码:
字符串
这是一个文化问题,正如在这篇github文章中提到的那样。
某些区域性使用的负号略有不同。如果将区域性更改为CultureInfo.InvariantCulture,则分析将正常工作。