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 を返します。