gpt4 book ai didi

c# - 在 asp.net 中更改区域性时实例是只读异常

转载 作者:行者123 更新时间:2023-12-02 14:48:59 25 4
gpt4 key购买 nike

我尝试实现多文化应用程序,用户可以在其中更改语言、日期格式等。我编写了核心,但它返回异常: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,我不确定我使用的是否正确。你能建议我如何正确地做到这一点吗?

最佳答案

您收到 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;

关于c# - 在 asp.net 中更改区域性时实例是只读异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56899198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com