【发布时间】:2023-03-29 22:08:02
【问题描述】:
我想知道如何确定 CultureInfo.CurrentCulture 返回的 CultureInfo 实例是否具有所有默认值或是否已由用户自定义。
我使用以下 LINQPad sn-p 和 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");
我在区域对话框中选择英语(南非)作为我的格式,我的 sn-p 报告如下。
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 小时时间。 sn-p 现在报告这个。
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。
【问题讨论】:
-
我认为您可以简单地比较
CurrentCulture和文化之间所有需要的值,您为与当前相同的语言环境创建。 -
为什么?理想情况下,您的应用程序不应依赖于用户在其机器上设置的文化。
-
是的@Sinatr,我可以比较属性,但是 CultureInfo 类非常丰富,我想它肯定能够给我这些信息。
-
@Grzenio,你从来没有问过一个问题只是为了知道答案吗?
-
@SteveCrane,很公平:)。我只是倾向于花太多时间处理遗留代码。
标签: c# .net cultureinfo regional-settings currentculture