c# - 如何返回用户在 PC 中使用的当前文化

标签 c# wpf cultureinfo culture

我读取了 csv 文件,列用逗号分隔。在某些文化中,分隔符是点,因此我决定将当前文化更改为“en-US”,后者使用逗号作为分隔符。但是当我完成一些操作后,我需要返回用户使用的文化。但我不能。

如何返回用户使用的当前文化?

Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
// do something 
CultureInfo ci = CultureInfo.CurrentCulture;
var a = ci.DisplayName;

继续是“en-US”

最佳答案

只需保存然后恢复:

var saved = Thread.CurrentThread.CurrentCulture;

try {
  Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
  // do something 
finally {
  Thread.CurrentThread.CurrentCulture = saved;
}

另一种(有点奇特)的可能性是将逻辑隐藏在专门设计的类中:

public sealed class CurrentCulture: IDisposable {
  private CultureInfo m_Saved;

  public CurrentCulture(CultureInfo info) {
    //TODO: validate info
    m_Saved = Thread.CurrentThread.CurrentCulture;
    Thread.CurrentThread.CurrentCulture = info;
  }

  public CurrentCulture(String name) :
    this(new CultureInfo(name)) {
  }

  public void Dispose() {
    if (m_Saved != null) {
      Thread.CurrentThread.CurrentCulture = m_Saved;
      m_Saved = null;
    }
  }
}

...

using (var c = new CurrentCulture("en-US")) {
  // do something 
}

关于c# - 如何返回用户在 PC 中使用的当前文化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33998989/

相关文章:

c# - 无法将属性 'Property' 中的值转换为类型 'System.Windows.DependencyProperty' 的对象

c# - 为 ComboBox 中的项目分配非顺序索引

c# - Asp.Net 核心 HttpClient 获取响应 411 长度要求错误

wpf - 如何显示绑定(bind)数据网格的值

c# - 如何在 C# 中以波斯语格式打印 DateTime

c# - 有什么办法可以使此 C# 代码更快?

.net - 无尽的动画?

wpf - 如何在 Datagrid 上绑定(bind) ObservableCollection<T>?

javascript - JavaScript 中对文化敏感的 ParseFloat 函数?

windows-phone-8 - 如何在Windows Phone 8.1 XAML APP中获取区域格式设置