@@ -382,13 +382,30 @@ private static object CastInteger(ulong number, TypeCode typeCode)
382
382
}
383
383
else if ( Regex . IsMatch ( v , @"[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?" ) ) //regular number
384
384
{
385
- if ( TryAndSwallow ( ( ) => byte . Parse ( v , formatter . NumberFormat ) , out result ) ) { }
386
- else if ( TryAndSwallow ( ( ) => short . Parse ( v , formatter . NumberFormat ) , out result ) ) { }
387
- else if ( TryAndSwallow ( ( ) => int . Parse ( v , formatter . NumberFormat ) , out result ) ) { }
388
- else if ( TryAndSwallow ( ( ) => long . Parse ( v , formatter . NumberFormat ) , out result ) ) { }
389
- else if ( TryAndSwallow ( ( ) => ulong . Parse ( v , formatter . NumberFormat ) , out result ) ) { }
390
- else if ( TryAndSwallow ( ( ) => float . Parse ( v , formatter . NumberFormat ) , out result ) ) { }
391
- else if ( TryAndSwallow ( ( ) => double . Parse ( v , formatter . NumberFormat ) , out result ) ) { }
385
+ #pragma warning disable format
386
+ if ( byte . TryParse ( v , NumberStyles . Integer , formatter . NumberFormat , out var byteValue ) ) { result = byteValue ; }
387
+ else if ( short . TryParse ( v , NumberStyles . Integer , formatter . NumberFormat , out var shortValue ) ) { result = shortValue ; }
388
+ else if ( int . TryParse ( v , NumberStyles . Integer , formatter . NumberFormat , out var intValue ) ) { result = intValue ; }
389
+ else if ( long . TryParse ( v , NumberStyles . Integer , formatter . NumberFormat , out var longValue ) ) { result = longValue ; }
390
+ else if ( ulong . TryParse ( v , NumberStyles . Integer , formatter . NumberFormat , out var ulongValue ) ) { result = ulongValue ; }
391
+ #if NETFRAMEWORK
392
+ else if ( float . TryParse ( v , NumberStyles . Float | NumberStyles . AllowThousands , formatter . NumberFormat , out var floatValue ) ) { result = floatValue ; }
393
+ else if ( double . TryParse ( v , NumberStyles . Float | NumberStyles . AllowThousands , formatter . NumberFormat , out var doubleValue ) ) { result = doubleValue ; }
394
+ #else
395
+ else if ( double . TryParse ( v , NumberStyles . Float | NumberStyles . AllowThousands , formatter . NumberFormat , out var doubleValue ) )
396
+ {
397
+ var floatValue = ( float ) doubleValue ;
398
+ if ( ! float . IsNaN ( floatValue ) && ! float . IsInfinity ( floatValue ) ) // .NET 6 or later support float.IsNormal
399
+ {
400
+ result = floatValue ;
401
+ }
402
+ else
403
+ {
404
+ result = doubleValue ;
405
+ }
406
+ }
407
+ #endif
408
+ #pragma warning restore format
392
409
else
393
410
{
394
411
//we couldn't parse it, default to string, It's probably too big
0 commit comments