gpt4 book ai didi

c# - 如何检测CurrentCulture是否被用户自定义?

转载 作者:行者123 更新时间:2023-11-30 17:01:13 25 4
gpt4 key购买 nike

我想知道如何确定 CultureInfo.CurrentCulture 返回的 CultureInfo 实例是否具有所有默认值,或者是否已由用户自定义。

我已经使用以下 LINQPad 代码段和 LINQPad 命令行运行程序进行了一些测试。

var ci = CultureInfo.CurrentCulture;
var dtf = ci.DateTimeFormat;

ci.Name.Dump("CultureInfo");
dtf.FullDateTimePattern.Dump("FullDateTimePattern");
dtf.LongDatePattern.Dump("LongDatePattern");
dtf.LongTimePattern.Dump("LongTimePattern");

我在区域对话框中选择英语(南非)作为我的格式,我的代码片段报告如下。

E:\Junk>lprun CurrentCulture.linq
CultureInfo: en-ZA
FullDateTimePattern: dd MMMM yyyy hh:mm:ss tt
LongDatePattern: dd MMMM yyyy
LongTimePattern: hh:mm:ss tt

然后我将长日期格式更改为隐藏当天的前导零,并将长短时间更改为 24 小时制。该代码段现在报告了这一点。

E:\Junk>lprun CurrentCulture.linq
CultureInfo: en-ZA
FullDateTimePattern: d MMMM yyyy HH:mm:ss
LongDatePattern: d MMMM yyyy
LongTimePattern: HH:mm:ss

虽然区域性名称保持不变,但我更改的属性向我展示了新值。

我的问题是是否有一个属性或方法可以告诉我 CurrentCulture 返回的文化是否已从其默认值(在本例中为 en-ZA)更改。我认为 CultureInfo.UseUserOverride 可能是该属性,但在任何一种情况下它都会返回 true。

最佳答案

您不能询问文化是否已被用户更改,但您可以请求用户未更改的文化。

new CultureInfo(CultureInfo.CurrentCulture.Name, false);

CultureInfo::GetCultureInfo(CultureInfo.CurrentCulture.Name);

在其中任何一个中,UseUserOverrides 属性都将为 false。

只有默认区域性可以让其数据被用户覆盖。管理员可以通过安装自定义替换区域性来覆盖任何区域性中的数据。您可以通过检查 CultureTypes 属性是否存在 CultureTypes.ReplacementCultures 标志来检测到这一点。在这种情况下无法获取原始数据。

请注意,如果您实际上是在尝试编写基于此更改其行为的代码,那么您编写的代码可能会被 future 的版本破坏。由于修复了错误,数据在不同版本之间确实发生了变化。

关于c# - 如何检测CurrentCulture是否被用户自定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21280754/

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