C# 如何检测用户是否自定义了CurrentCulture?

C# 如何检测用户是否自定义了CurrentCulture?,c#,.net,cultureinfo,regional-settings,currentculture,C#,.net,Cultureinfo,Regional Settings,Currentculture,我想知道如何确定CultureInfo.CurrentCulture返回的CultureInfo实例是否具有所有默认值,或者是否已由用户自定义 new CultureInfo(CultureInfo.CurrentCulture.Name, false); 我已经使用以下LINQPad代码段和LINQPad命令行运行程序进行了一些测试 var ci = CultureInfo.CurrentCulture; var dtf = ci.DateTimeFormat; ci.Name.Dump(

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

new CultureInfo(CultureInfo.CurrentCulture.Name, false);
我已经使用以下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);

在这两种情况中,UseUserOverrides属性都将为false

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


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

我认为您可以简单地比较
CurrentCulture
和您为与current相同的区域设置创建的区域性之间所有需要的值。为什么?理想情况下,您的应用程序不应依赖于用户在其计算机上设置的区域性。是的@Sinatr,我可以比较属性,但由于CultureInfo类非常丰富,我认为它肯定能够给我提供这些信息。@Grzenio,您从来没有问过一个问题只是为了知道答案吗?@SteveCrane,很公平:)。我只是倾向于花太多的时间处理遗留代码。