C# 修改当前区域性?

C# 修改当前区域性?,c#,.net,C#,.net,因为在任何地方都需要这样做!问题是做newcultureinfo(“en-US”)忽略所有其他计算机特定的设置。。。 有没有办法复制当前区域性? 我试图修改currentculture,但出现只读错误…这是怎么回事: CultureInfo-culture=CultureInfo.CurrentCulture只需更改一行: CultureInfo culture = new CultureInfo("en-US"); culture.DateTimeFormat.DateSe

因为在任何地方都需要这样做!问题是做
newcultureinfo(“en-US”)忽略所有其他计算机特定的设置。。。
有没有办法复制当前区域性?
我试图修改currentculture,但出现只读错误…

这是怎么回事:
CultureInfo-culture=CultureInfo.CurrentCulture

只需更改一行:

 CultureInfo culture = new CultureInfo("en-US");

        culture.DateTimeFormat.DateSeparator = "/";
        culture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";

        //dekadikoi arithmoi
        culture.NumberFormat.NumberDecimalSeparator = ".";
        Thread.CurrentThread.CurrentCulture = culture;
        Thread.CurrentThread.CurrentUICulture = culture;
只需复印一份课程,并根据需要修改即可。如果确实需要更改线程本身的CultureInfo(而不是使用副本),则需要为代码授予安全权限,并将
ControlThread
属性设置为true。(参见链接示例)

您可能希望使用:

CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();

culture.DateTimeFormat.DateSeparator = "/";
culture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";

//dekadikoi arithmoi
culture.NumberFormat.NumberDecimalSeparator = ".";
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
相反。

按照的解决方案,我建议从特定的区域性开始,因为CurrentCulture可以设置为任何值

CultureInfo culture = (CultureInfo)CultureInfo.CurrentUICulture.Clone();
然后将这一行添加到
Program.cs

public static CultureInfo GetCustomCulture(string baseCulture = "en-ZA", char numberDecimalSeperator = '.', char listSeperator = ',') {
    var culture = CultureInfo.GetCultureInfo(baseCulture).Clone();

    culture.NumberFormat.NumberDecimalSeparator = numberDecimalSeperator + "";
    culture.TextInfo.ListSeparator = listSeperator + "";

    return culture;
}

无法修改CultureInfo.CurrentCulture属性,因为它是只读的,并且只有“Get”方法。当前区域性可以设置为任何值正是从当前区域性开始的原因。这将更改所有旨在保持与当前区域性相同的设置。@JonHanna,我注意到您正在解决方案中克隆区域性。这就是你指的吗?在我必须使用这种文化的情况下,这并不重要,因为我们不使用原始设置,但这仍然是一个很好的捕获。非常感谢。
public static CultureInfo GetCustomCulture(string baseCulture = "en-ZA", char numberDecimalSeperator = '.', char listSeperator = ',') {
    var culture = CultureInfo.GetCultureInfo(baseCulture).Clone();

    culture.NumberFormat.NumberDecimalSeparator = numberDecimalSeperator + "";
    culture.TextInfo.ListSeparator = listSeperator + "";

    return culture;
}
System.Globalization.CultureInfo.CurrentCulture = GetCustomCulture();