【问题标题】:How do I use string formatting, comparison and parsing in a system-independent way?如何以独立于系统的方式使用字符串格式化、比较和解析?
【发布时间】:2015-07-20 18:01:31
【问题描述】:

我正在用 C# 编写一个控制台应用程序,它大量使用字符串比较以及数字的格式化和解析,这些数字是从文本文件读取和写入的。

理想情况下,该程序在每台计算机上的行为应该完全相同,但是在具有不同语言环境的计算机上对其进行测试后,我意识到 C# 中提到的功能会自动使用当前语言环境的格式。这是不幸的,因为系统的语言环境会导致我的程序行为发生变化,甚至导致程序崩溃(即,当使用错误的系统特定的小数分隔符解析数字时)。

我正在寻找一种方法来告诉编译器/程序忽略当前程序范围内的语言环境并改用默认/英语语言环境。

我见过提到的解决方案可以更改线程的默认语言环境

我不确定使用 linq、parallel foreach 等如何解决问题。所以理想情况下,我只想为整个程序设置英语/默认语言环境以避免任何事故。我该怎么做?

【问题讨论】:

  • C# 中的大多数解析和格式化方法都有一个采用IFormatProvider 的重载,您可以使用CultureInfo.InvariantCulture 指定您不想使用当前区域性进行解析和格式化。
  • @juharr:这很难很好地应用 DRY 原则,而且很容易出错。在一个包含许多提到的字符串操作的程序中,您有时一定会忘记添加格式提供程序。
  • 如果您使用代码分析,则有一条规则会标记它们。

标签: c# localization


【解决方案1】:

查看:Set default thread culture for all thread?

但总而言之,它是使用CultureInfo.DefaultThreadCurrentCulture 属性设置的,每个https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.defaultthreadcurrentculture.aspx

【讨论】:

  • 就是这样。但奇怪的是,CultureInfo.DefaultThreadCurrentCulture 似乎只有在我还另外设置运行线程的文化时才有效。如果我只设置两者之一,它仍然无法工作......
  • 这似乎是一个线程在启动时读取该属性,所以一个已经创建的线程可能不会。但我只是推测。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多