return 如何了解用户在 PC 中使用的当前文化

How can return on current culture who user used in PC

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

如何return当前用户使用的文化?

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;
}

另一种(有点异国情调)的可能性是将逻辑隐藏在特别设计的class:

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 
}
//Save your current culture;
var myCurrentCulture = Thread.CurrentThread.CurrentCulture;

//Adjust the culture
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");

//Set it back
Thread.CurrentThread.CurrentCulture = myCurrentCulture;

CultureInfo ci = CultureInfo.CurrentCulture;
var a = ci.DisplayName;