Double ToString("C") 文化特定

Double ToString("C") culture specific

我知道这行得通 (source):

double x = 9.7;
x.ToString("C", CultureInfo.CreateSpecificCulture("nl-NL"));

但是我的代码后面有这段代码:

System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB");

在我的 aspx 网络表单中,我想使用 double.tostring("C"),所以那里没有 cultureinfo。因为它是在当前线程上设置的。但是本地机器是nl-NL。 CurrentThread 在后面的代码中设置为 en-GB,但 valutasign 仍然是欧元符号而不是英镑。

我错过了什么吗?还是在需要 cultureinfo 的情况下使用 tostring 的重载?换句话说,我是否必须重写所有 double tostrings 才能使用 cultureinfo?

确保在页面生命周期中足够快地初始化区域性。事实上,甚至有一个方法可以让你专门为此目的重写:Page.InitializeCulture.

基于 cookie 的示例:

    protected override void InitializeCulture()
    {
        var cookie = Request.Cookies[WebConfigurationManager.AppSettings["LocaleCookieName"]];
        if (cookie != null)
            Culture = UICulture = cookie.Value;
    }

无需调用基方法,详见文档