C#:在Windows 10上处理Convert.ToDouble(' Infinity')的格式异常

时间:2016-05-12 07:25:02

标签: c# windows-10 cultureinfo

我有一个C#表单应用程序。作为其功能的一部分,它以字符串格式将双值写入文件,其中一些是double.Infinity。

还有另一部分应用程序从文件中读取这些值并将它们转换回double。

当在Windows 7上执行写入值部分并且在Windows 10上执行读取相同文件时,在转换“无穷大”时会出现格式异常。看起来默认(us-en)文化使用的符号在Windows 8和10之间发生了变化。

在应用程序中有许多Convert.ToDouble()实例,并且通过try-catch或使用double.tryParse()处理这些实例中的每个实例都不是可行的解决方案,因为它需要在许多项目中进行更改。 / p>

是否有解决方法可以避免此格式异常问题?

提前致谢,

卡皮尔西

1 个答案:

答案 0 :(得分:0)

在处理数据库和在其他文化中存储数据时,这是一个更大的问题。我们最初遇到的问题是,我们软件的西班牙语版本无法正确读取无穷大,并且将无穷大存储为符号,而不是单词。即使试图强迫它进入英国文化,它似乎也被打破了。

然后我们在英语文化中看到这个问题出现在Windows 10上,其中无穷大符号现在将保存在数据库中。此问题可能会导致Windows版本和跨文化的问题。 最安全的做法是使用CultureInfo.InvariantCulture存储和检索数据,无论是在文件还是数据库中。这样它总会像你期望的那样。

如果你已经在文件/数据库中遇到问题,那么你可以运行一个相当简单的脚本来寻找'Double |∞'并将其替换为'Double | Infinity',它是不变类型。 这样可以避免将来出现问题