首页 文章

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

提问于
浏览
1

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

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

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

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

有没有解决此问题的方法来避免此格式异常问题?

提前致谢,

卡皮尔

1 回答

  • 0

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

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

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

相关问题