【问题标题】:Instance is read-only Exception while changing culture in asp.net在 asp.net 中更改文化时实例为只读异常
【发布时间】:2019-07-05 08:18:24
【问题描述】:

我尝试实现用户能够更改语言、日期格式等的多元文化应用程序。我编写了核心但它返回异常: System.InvalidOperationException:实例是只读的。

switch (culture)
    {
        case SystemCulture.English:
                Thread.CurrentThread.CurrentCulture = new CultureInfo(CultureCodes.English);
                Thread.CurrentThread.CurrentUICulture = new CultureInfo(CultureCodes.English);
                break;
                        //another cultures here
    }
    switch (cultureFormat)
    {
        case SystemDateFormat.European:
                  var europeanDateFormat = CultureInfo.GetCultureInfo(CultureCodes.Italian).DateTimeFormat;
                  Thread.CurrentThread.CurrentCulture.DateTimeFormat = europeanDateFormat;
                  Thread.CurrentThread.CurrentUICulture.DateTimeFormat = europeanDateFormat;
                  break;
    //another cultures here
    }
        

我在互联网上找到了一些信息,我必须使用我的文化的新实例对象,我更改了我的代码只是添加:

CultureInfo myCulture;

switch (culture)
{
       case SystemCulture.English:
            myCulture= new CultureInfo(CultureCodes.English);
            break;
}

然后,在开关之外:

Thread.CurrentThread.CurrentCulture = cultureInfo;

我不熟悉 Threads,我不确定我使用的是否正确。 你能建议我如何正确地做到这一点吗?

【问题讨论】:

    标签: c# .net asp.net-mvc currentculture


    【解决方案1】:

    您收到Instance is read-only 错误,因为您试图通过以下代码更改只读区域性的属性。

    Thread.CurrentThread.CurrentCulture.DateTimeFormat = europeanDateFormat;
    

    您可以通过IsReadOnly 属性检查文化是否为只读;内置的是。

    相反,您必须创建当前活动区域性的克隆/副本,对该克隆应用任何更改并将该更改分配给当前线程的CurrentCulture 和/或CurrentUICulture

    var clone = Thread.CurrentThread.CurrentCulture.Clone() as CultureInfo;
    clone.DateTimeFormat = CultureInfo.GetCultureInfo("it").DateTimeFormat;
    
    Thread.CurrentThread.CurrentCulture = clone;
    Thread.CurrentThread.CurrentUICulture = clone; 
    

    【讨论】:

    • 谢谢,我刚刚添加了检查 if(Thread.CurrentThread.CurrentCulture.IsReadOnly){}
    • 实际上,CultureInfo 和格式信息(DateTimeFormat、NumberFormat)都可以是只读的(例如,如果您想更改小数点分隔符或现有的 NumberFormat)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多