11 [__DynamicallyInvokable]
16 internal int[] numberGroupSizes =
new int[1]
21 internal int[] currencyGroupSizes =
new int[1]
26 internal int[] percentGroupSizes =
new int[1]
31 internal string positiveSign =
"+";
33 internal string negativeSign =
"-";
35 internal string numberDecimalSeparator =
".";
37 internal string numberGroupSeparator =
",";
39 internal string currencyGroupSeparator =
",";
41 internal string currencyDecimalSeparator =
".";
43 internal string currencySymbol =
"¤";
45 internal string ansiCurrencySymbol;
47 internal string nanSymbol =
"NaN";
49 internal string positiveInfinitySymbol =
"Infinity";
51 internal string negativeInfinitySymbol =
"-Infinity";
53 internal string percentDecimalSeparator =
".";
55 internal string percentGroupSeparator =
",";
57 internal string percentSymbol =
"%";
59 internal string perMilleSymbol =
"‰";
61 [OptionalField(VersionAdded = 2)]
62 internal string[] nativeDigits =
new string[10]
76 [OptionalField(VersionAdded = 1)]
77 internal int m_dataItem;
79 internal int numberDecimalDigits = 2;
81 internal int currencyDecimalDigits = 2;
83 internal int currencyPositivePattern;
85 internal int currencyNegativePattern;
87 internal int numberNegativePattern = 1;
89 internal int percentPositivePattern;
91 internal int percentNegativePattern;
93 internal int percentDecimalDigits = 2;
95 [OptionalField(VersionAdded = 2)]
96 internal int digitSubstitution = 1;
98 internal bool isReadOnly;
100 [OptionalField(VersionAdded = 1)]
101 internal bool m_useUserOverride;
103 [OptionalField(VersionAdded = 2)]
104 internal bool m_isInvariant;
106 [OptionalField(VersionAdded = 1)]
107 internal bool validForParseAsNumber =
true;
109 [OptionalField(VersionAdded = 1)]
110 internal bool validForParseAsCurrency =
true;
116 [__DynamicallyInvokable]
119 [__DynamicallyInvokable]
122 if (invariantInfo ==
null)
125 numberFormatInfo.m_isInvariant =
true;
126 invariantInfo =
ReadOnly(numberFormatInfo);
128 return invariantInfo;
136 [__DynamicallyInvokable]
139 [__DynamicallyInvokable]
142 return currencyDecimalDigits;
144 [__DynamicallyInvokable]
147 if (value < 0 || value > 99)
152 currencyDecimalDigits = value;
161 [__DynamicallyInvokable]
164 [__DynamicallyInvokable]
167 return currencyDecimalSeparator;
169 [__DynamicallyInvokable]
173 VerifyDecimalSeparator(value,
"CurrencyDecimalSeparator");
174 currencyDecimalSeparator = value;
181 [__DynamicallyInvokable]
184 [__DynamicallyInvokable]
196 [__DynamicallyInvokable]
199 [__DynamicallyInvokable]
202 return (
int[])currencyGroupSizes.Clone();
204 [__DynamicallyInvokable]
212 int[] groupSize = (
int[])value.Clone();
213 CheckGroupSize(
"CurrencyGroupSizes", groupSize);
214 currencyGroupSizes = groupSize;
223 [__DynamicallyInvokable]
226 [__DynamicallyInvokable]
229 return (
int[])numberGroupSizes.Clone();
231 [__DynamicallyInvokable]
239 int[] groupSize = (
int[])value.Clone();
240 CheckGroupSize(
"NumberGroupSizes", groupSize);
241 numberGroupSizes = groupSize;
250 [__DynamicallyInvokable]
253 [__DynamicallyInvokable]
256 return (
int[])percentGroupSizes.Clone();
258 [__DynamicallyInvokable]
266 int[] groupSize = (
int[])value.Clone();
267 CheckGroupSize(
"PercentGroupSizes", groupSize);
268 percentGroupSizes = groupSize;
276 [__DynamicallyInvokable]
279 [__DynamicallyInvokable]
282 return currencyGroupSeparator;
284 [__DynamicallyInvokable]
288 VerifyGroupSeparator(value,
"CurrencyGroupSeparator");
289 currencyGroupSeparator = value;
297 [__DynamicallyInvokable]
300 [__DynamicallyInvokable]
303 return currencySymbol;
305 [__DynamicallyInvokable]
313 currencySymbol = value;
319 [__DynamicallyInvokable]
322 [__DynamicallyInvokable]
326 if (!currentCulture.m_isInherited)
342 [__DynamicallyInvokable]
345 [__DynamicallyInvokable]
350 [__DynamicallyInvokable]
366 [__DynamicallyInvokable]
369 [__DynamicallyInvokable]
372 return currencyNegativePattern;
374 [__DynamicallyInvokable]
377 if (value < 0 || value > 15)
382 currencyNegativePattern = value;
390 [__DynamicallyInvokable]
393 [__DynamicallyInvokable]
396 return numberNegativePattern;
398 [__DynamicallyInvokable]
401 if (value < 0 || value > 4)
406 numberNegativePattern = value;
414 [__DynamicallyInvokable]
417 [__DynamicallyInvokable]
420 return percentPositivePattern;
422 [__DynamicallyInvokable]
425 if (value < 0 || value > 3)
430 percentPositivePattern = value;
438 [__DynamicallyInvokable]
441 [__DynamicallyInvokable]
444 return percentNegativePattern;
446 [__DynamicallyInvokable]
449 if (value < 0 || value > 11)
454 percentNegativePattern = value;
462 [__DynamicallyInvokable]
465 [__DynamicallyInvokable]
468 return negativeInfinitySymbol;
470 [__DynamicallyInvokable]
478 negativeInfinitySymbol = value;
486 [__DynamicallyInvokable]
489 [__DynamicallyInvokable]
494 [__DynamicallyInvokable]
502 negativeSign = value;
510 [__DynamicallyInvokable]
513 [__DynamicallyInvokable]
516 return numberDecimalDigits;
518 [__DynamicallyInvokable]
521 if (value < 0 || value > 99)
526 numberDecimalDigits = value;
535 [__DynamicallyInvokable]
538 [__DynamicallyInvokable]
541 return numberDecimalSeparator;
543 [__DynamicallyInvokable]
547 VerifyDecimalSeparator(value,
"NumberDecimalSeparator");
548 numberDecimalSeparator = value;
556 [__DynamicallyInvokable]
559 [__DynamicallyInvokable]
562 return numberGroupSeparator;
564 [__DynamicallyInvokable]
568 VerifyGroupSeparator(value,
"NumberGroupSeparator");
569 numberGroupSeparator = value;
577 [__DynamicallyInvokable]
580 [__DynamicallyInvokable]
583 return currencyPositivePattern;
585 [__DynamicallyInvokable]
588 if (value < 0 || value > 3)
593 currencyPositivePattern = value;
601 [__DynamicallyInvokable]
604 [__DynamicallyInvokable]
607 return positiveInfinitySymbol;
609 [__DynamicallyInvokable]
617 positiveInfinitySymbol = value;
625 [__DynamicallyInvokable]
628 [__DynamicallyInvokable]
633 [__DynamicallyInvokable]
641 positiveSign = value;
649 [__DynamicallyInvokable]
652 [__DynamicallyInvokable]
655 return percentDecimalDigits;
657 [__DynamicallyInvokable]
660 if (value < 0 || value > 99)
665 percentDecimalDigits = value;
674 [__DynamicallyInvokable]
677 [__DynamicallyInvokable]
680 return percentDecimalSeparator;
682 [__DynamicallyInvokable]
686 VerifyDecimalSeparator(value,
"PercentDecimalSeparator");
687 percentDecimalSeparator = value;
695 [__DynamicallyInvokable]
698 [__DynamicallyInvokable]
701 return percentGroupSeparator;
703 [__DynamicallyInvokable]
707 VerifyGroupSeparator(value,
"PercentGroupSeparator");
708 percentGroupSeparator = value;
716 [__DynamicallyInvokable]
719 [__DynamicallyInvokable]
722 return percentSymbol;
724 [__DynamicallyInvokable]
732 percentSymbol = value;
740 [__DynamicallyInvokable]
743 [__DynamicallyInvokable]
746 return perMilleSymbol;
748 [__DynamicallyInvokable]
756 perMilleSymbol = value;
770 return (
string[])nativeDigits.Clone();
775 VerifyNativeDigits(value,
"NativeDigits");
776 nativeDigits = value;
794 VerifyDigitSubstitution(value,
"DigitSubstitution");
795 digitSubstitution = (int)value;
800 [__DynamicallyInvokable]
809 if (numberDecimalSeparator != numberGroupSeparator)
811 validForParseAsNumber =
true;
815 validForParseAsNumber =
false;
817 if (numberDecimalSeparator != numberGroupSeparator && numberDecimalSeparator != currencyGroupSeparator && currencyDecimalSeparator != numberGroupSeparator && currencyDecimalSeparator != currencyGroupSeparator)
819 validForParseAsCurrency =
true;
823 validForParseAsCurrency =
false;
837 private static void VerifyDecimalSeparator(
string decSep,
string propertyName)
841 throw new ArgumentNullException(propertyName, Environment.GetResourceString(
"ArgumentNull_String"));
843 if (decSep.Length == 0)
845 throw new ArgumentException(Environment.GetResourceString(
"Argument_EmptyDecString"));
849 private static void VerifyGroupSeparator(
string groupSep,
string propertyName)
851 if (groupSep ==
null)
853 throw new ArgumentNullException(propertyName, Environment.GetResourceString(
"ArgumentNull_String"));
857 private static void VerifyNativeDigits(
string[] nativeDig,
string propertyName)
859 if (nativeDig ==
null)
861 throw new ArgumentNullException(propertyName, Environment.GetResourceString(
"ArgumentNull_Array"));
863 if (nativeDig.Length != 10)
865 throw new ArgumentException(Environment.GetResourceString(
"Argument_InvalidNativeDigitCount"), propertyName);
870 if (num >= nativeDig.Length)
874 if (nativeDig[num] ==
null)
876 throw new ArgumentNullException(propertyName, Environment.GetResourceString(
"ArgumentNull_ArrayValue"));
878 if (nativeDig[num].Length != 1)
880 if (nativeDig[num].Length != 2)
882 throw new ArgumentException(Environment.GetResourceString(
"Argument_InvalidNativeDigitValue"), propertyName);
884 if (!
char.IsSurrogatePair(nativeDig[num][0], nativeDig[num][1]))
886 throw new ArgumentException(Environment.GetResourceString(
"Argument_InvalidNativeDigitValue"), propertyName);
889 if (CharUnicodeInfo.GetDecimalDigitValue(nativeDig[num], 0) != num && CharUnicodeInfo.GetUnicodeCategory(nativeDig[num], 0) !=
UnicodeCategory.PrivateUse)
895 throw new ArgumentException(Environment.GetResourceString(
"Argument_InvalidNativeDigitValue"), propertyName);
898 private static void VerifyDigitSubstitution(
DigitShapes digitSub,
string propertyName)
907 throw new ArgumentException(Environment.GetResourceString(
"Argument_InvalidDigitSubstitution"), propertyName);
910 [SecuritySafeCritical]
913 if (cultureData !=
null)
915 cultureData.GetNFIValues(
this);
916 if (cultureData.IsInvariantCulture)
918 m_isInvariant =
true;
923 private void VerifyWritable()
927 throw new InvalidOperationException(Environment.GetResourceString(
"InvalidOperation_ReadOnly"));
935 [__DynamicallyInvokable]
940 if (cultureInfo !=
null && !cultureInfo.m_isInherited)
942 numInfo = cultureInfo.numInfo;
954 if (formatProvider !=
null)
967 [__DynamicallyInvokable]
971 numberFormatInfo.isReadOnly =
false;
972 return numberFormatInfo;
975 internal static void CheckGroupSize(
string propName,
int[] groupSize)
980 if (num >= groupSize.Length)
984 if (groupSize[num] < 1)
986 if (num == groupSize.Length - 1 && groupSize[num] == 0)
990 throw new ArgumentException(Environment.GetResourceString(
"Argument_InvalidGroupSize"), propName);
992 if (groupSize[num] > 9)
998 throw new ArgumentException(Environment.GetResourceString(
"Argument_InvalidGroupSize"), propName);
1004 [__DynamicallyInvokable]
1019 [__DynamicallyInvokable]
1031 numberFormatInfo.isReadOnly =
true;
1032 return numberFormatInfo;
1035 internal static void ValidateParseStyleInteger(
NumberStyles style)
1047 internal static void ValidateParseStyleFloatingPoint(
NumberStyles style)
1051 throw new ArgumentException(Environment.GetResourceString(
"Argument_InvalidNumberStyles"),
"style");
1055 throw new ArgumentException(Environment.GetResourceString(
"Arg_HexStyleNotSupported"));
static Thread CurrentThread
Gets the currently running thread.
The exception that is thrown when a null reference (Nothing in Visual Basic) is passed to a method th...
virtual object GetFormat(Type formatType)
Gets an object that defines how to format the specified type.
The exception that is thrown when the value of an argument is outside the allowable range of values a...
Describes the source and destination of a given serialized stream, and provides an additional caller-...
NumberStyles
Determines the styles permitted in numeric string arguments that are passed to the Parse and TryParse...
CultureInfo?? CurrentCulture
Gets or sets the culture for the current thread.
Provides information about, and means to manipulate, the current environment and platform....
Supports cloning, which creates a new instance of a class with the same value as an existing instance...
Format character that affects the layout of text or the operation of text processes,...
Represents type declarations: class types, interface types, array types, value types,...
DigitShapes
Specifies the culture-specific display of digits.
static CultureInfo CurrentCulture
Gets or sets the T:System.Globalization.CultureInfo object that represents the culture used by the cu...
The exception that is thrown when one of the arguments provided to a method is not valid.
UnicodeCategory
Defines the Unicode category of a character.
Specifies that the class can be serialized.
virtual NumberFormatInfo NumberFormat
Gets or sets a T:System.Globalization.NumberFormatInfo that defines the culturally appropriate format...
Provides information about a specific culture (called a locale for unmanaged code development)....
Creates and controls a thread, sets its priority, and gets its status.