System.Number

using System.Runtime.InteropServices;
using System.Globalization;
using System.Runtime.CompilerServices;
namespace System
{
    private class Number : System.Object
    {
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        private struct NumberBuffer
        {
            public const int NumberBufferBytes = 0x00000072;
            private byte* baseAddress;
            public char* digits;
            public int precision;
            public int scale;
            public bool sign;
            public NumberBuffer(byte* stackBuffer)            
            {
                //IL_0000:  ldarg.0
                //IL_0001:  ldarg.1
                //IL_0002:  stfld      uint8* System.Number/NumberBuffer::baseAddress
                //IL_0007:  ldarg.0
                //IL_0008:  ldarg.1
                //IL_0009:  ldc.i4.s   12
                //IL_000b:  conv.i
                //IL_000c:  add
                //IL_000d:  stfld      char* System.Number/NumberBuffer::digits
                //IL_0012:  ldarg.0
                //IL_0013:  ldc.i4.0
                //IL_0014:  stfld      int32 System.Number/NumberBuffer::precision
                //IL_0019:  ldarg.0
                //IL_001a:  ldc.i4.0
                //IL_001b:  stfld      int32 System.Number/NumberBuffer::scale
                //IL_0020:  ldarg.0
                //IL_0021:  ldc.i4.0
                //IL_0022:  stfld      bool System.Number/NumberBuffer::sign
                //IL_0027:  ret
                this.baseAddress=stackBuffer;
                this.digits = stackBuffer + 12;
                this.precision = 0;
                this.scale = 0;
                this.sign = false;                
            }
            public byte* PackForNative()
            {
                //.maxstack  3
                //.locals init (int32* V_0)
                //IL_0000:  ldarg.0
                //IL_0001:  ldfld      uint8* System.Number/NumberBuffer::baseAddress
                //IL_0006:  stloc.0
                //IL_0007:  ldloc.0
                //IL_0008:  ldarg.0
                //IL_0009:  ldfld      int32 System.Number/NumberBuffer::precision
                //IL_000e:  stind.i4
                //IL_000f:  ldloc.0
                //IL_0010:  ldc.i4.4
                //IL_0011:  conv.i
                //IL_0012:  add
                //IL_0013:  ldarg.0
                //IL_0014:  ldfld      int32 System.Number/NumberBuffer::scale
                //IL_0019:  stind.i4
                //IL_001a:  ldloc.0
                //IL_001b:  ldc.i4.8
                //IL_001c:  conv.i
                //IL_001d:  add
                //IL_001e:  ldarg.0
                //IL_001f:  ldfld      bool System.Number/NumberBuffer::sign
                //IL_0024:  brtrue.s   IL_0029

                //IL_0026:  ldc.i4.0
                //IL_0027:  br.s       IL_002a

                //IL_0029:  ldc.i4.1
                //IL_002a:  stind.i4
                //IL_002b:  ldarg.0
                //IL_002c:  ldfld      uint8* System.Number/NumberBuffer::baseAddress
                //IL_0031:  ret
                int* V_0;
                V_0 = this.baseAddress;
                *V_0 = this.precision;
                *(V_0 + 4) = this.scale;                
                if(this.sign)
                {
                   *(V_0+8)=1;
                }
                else
                {
                   *(V_0+8)=0;
                }
                return this.baseAddress;
            }
        }
        private const int NumberMaxDigits = 0x00000032;
        private const int Int32Precision = 0x0000000A;
        private const int UInt32Precision = 0x0000000A;
        private const int Int64Precision = 0x00000013;
        private const int UInt64Precision = 0x00000014;
        private Number():base()
        {
            //.maxstack  8
            //IL_0000:  ldarg.0
            //IL_0001:  call       instance void System.Object::.ctor()
            //IL_0006:  ret            
        }
        public static string FormatDecimal(System.Decimal @value,string format,NumberFormatInfo info)
        {
            //internalcall
        }
        public static string FormatDouble(float64 @value,string format,NumberFormatInfo info)
        {
            //internalcall
        }
        public static string FormatInt32(int32 @value,string format,NumberFormatInfo info)
        {
            //internalcall
        }
        public static string FormatUInt32(uint32 @value,string format,NumberFormatInfo info)
        {
            //internalcall
        }
        public static string FormatInt64(int64 @value,string format,NumberFormatInfo info)
        {
            //internalcall
        }
        public static string FormatUInt64(uint64 @value,string format,NumberFormatInfo info)
        {
            //internalcall
        }
        public static string FormatSingle(float32 @value,string format,NumberFormatInfo info)
        {
            //internalcall
        }
        public static bool NumberBufferToDecimal(byte* number, ref System.Decimal @value)
        {
            //internalcall
        }
        public static bool NumberBufferToDouble(byte* number, ref double @value)
        {
            //internalcall
        }
        private static bool HexNumberToInt32(ref NumberBuffer number, ref int @value)
        {
            //.maxstack  2
            //.locals init (uint32 V_0,
            //         bool V_1)
            //IL_0000:  ldc.i4.0
            //IL_0001:  stloc.0
            //IL_0002:  ldarg.0
            //IL_0003:  ldloca.s   V_0
            //IL_0005:  call       bool System.Number::HexNumberToUInt32(valuetype System.Number/NumberBuffer&,
            //                                                           uint32&)
            //IL_000a:  stloc.1
            //IL_000b:  ldarg.1
            //IL_000c:  ldloc.0
            //IL_000d:  stind.i4
            //IL_000e:  ldloc.1
            //IL_000f:  ret
            uint V_0;
            bool V_1;
            V_0 = 0;
            V_1=Number.HexNumberToUInt32(ref number, ref V_0);
            @value = V_0;
            return V_1;
        }
        private static bool HexNumberToInt64(ref NumberBuffer number, ref long @value)
        {
            //.maxstack  2
            //.locals init (uint64 V_0,
            //         bool V_1)
            //IL_0000:  ldc.i4.0
            //IL_0001:  conv.i8
            //IL_0002:  stloc.0
            //IL_0003:  ldarg.0
            //IL_0004:  ldloca.s   V_0
            //IL_0006:  call       bool System.Number::HexNumberToUInt64(valuetype System.Number/NumberBuffer&,
            //                                                           uint64&)
            //IL_000b:  stloc.1
            //IL_000c:  ldarg.1
            //IL_000d:  ldloc.0
            //IL_000e:  stind.i8
            //IL_000f:  ldloc.1
            //IL_0010:  ret
            ulong V_0;
            bool V_1;
            V_0 = (ulong)0;
            V_1=Number.HexNumberToUInt64(ref number, ref V_0);
            @value = V_0;
            return V_1;
        }
        private static bool HexNumberToUInt32(ref NumberBuffer number,ref uint @value)
        {
            //.maxstack  3
            //.locals init (int32 V_0,               
            //         char* V_1,
            //         uint32 V_2,
            //         uint32 V_3)
            //IL_0000:  ldarg.0
            //IL_0001:  ldfld      int32 System.Number/NumberBuffer::scale
            //IL_0006:  stloc.0
            //IL_0007:  ldloc.0
            //IL_0008:  ldc.i4.s   10
            //IL_000a:  bgt.s      IL_0015

            //IL_000c:  ldloc.0                       
            //IL_000d:  ldarg.0
            //IL_000e:  ldfld      int32 System.Number/NumberBuffer::precision
            //IL_0013:  bge.s      IL_0017

            //IL_0015:  ldc.i4.0
            //IL_0016:  ret

            //IL_0017:  ldarg.0
           //IL_0018:  ldfld      char* System.Number/NumberBuffer::digits
            //IL_001d:  stloc.1
            //IL_001e:  ldc.i4.0
            //IL_001f:  stloc.2
            //IL_0020:  br.s       IL_0082

            //IL_0022:  ldloc.2
            //IL_0023:  ldc.i4     0xfffffff                          
            //IL_0028:  ble.un.s   IL_002c

            //IL_002a:  ldc.i4.0
            //IL_002b:  ret

            //IL_002c:  ldloc.2
            //IL_002d:  ldc.i4.s   16
            //IL_002f:  mul
            //IL_0030:  stloc.2
            //IL_0031:  ldloc.1
            //IL_0032:  ldind.u2
            //IL_0033:  brfalse.s  IL_0082

            //IL_0035:  ldloc.2                                 
            //IL_0036:  stloc.3
            //IL_0037:  ldloc.1
            //IL_0038:  ldind.u2
            //IL_0039:  brfalse.s  IL_007a

            //IL_003b:  ldloc.1               
            //IL_003c:  ldind.u2
            //IL_003d:  ldc.i4.s   48
            //IL_003f:  blt.s      IL_0051

            //IL_0041:  ldloc.1
            //IL_0042:  ldind.u2
            //IL_0043:  ldc.i4.s   57
            //IL_0045:  bgt.s      IL_0051

            //IL_0047:  ldloc.3                     
            //IL_0048:  ldloc.1
            //IL_0049:  ldind.u2
            //IL_004a:  ldc.i4.s   48
            //IL_004c:  sub
            //IL_004d:  add
            //IL_004e:  stloc.3
            //IL_004f:  br.s       IL_0075

            //IL_0051:  ldloc.1                  
            //IL_0052:  ldind.u2
            //IL_0053:  ldc.i4.s   65
            //IL_0055:  blt.s      IL_006a

            //IL_0057:  ldloc.1
            //IL_0058:  ldind.u2
            //IL_0059:  ldc.i4.s   70
            //IL_005b:  bgt.s      IL_006a

            //IL_005d:  ldloc.3                  
            //IL_005e:  ldloc.1
            //IL_005f:  ldind.u2
            //IL_0060:  ldc.i4.s   65
            //IL_0062:  sub
            //IL_0063:  ldc.i4.s   10
            //IL_0065:  add
            //IL_0066:  add
            //IL_0067:  stloc.3
            //IL_0068:  br.s       IL_0075

            //IL_006a:  ldloc.3                
            //IL_006b:  ldloc.1
            //IL_006c:  ldind.u2
            //IL_006d:  ldc.i4.s   97
            //IL_006f:  sub
            //IL_0070:  ldc.i4.s   10
            //IL_0072:  add
            //IL_0073:  add
            //IL_0074:  stloc.3
            //IL_0075:  ldloc.1                            
            //IL_0076:  ldc.i4.2
            //IL_0077:  conv.i
            //IL_0078:  add
            //IL_0079:  stloc.1
            //IL_007a:  ldloc.3
            //IL_007b:  ldloc.2
            //IL_007c:  bge.un.s   IL_0080

            //IL_007e:  ldc.i4.0
            //IL_007f:  ret

            //IL_0080:  ldloc.3
            //IL_0081:  stloc.2
            //IL_0082:  ldloc.0
            //IL_0083:  ldc.i4.1
            //IL_0084:  sub
            //IL_0085:  dup
            //IL_0086:  stloc.0
            //IL_0087:  ldc.i4.0
            //IL_0088:  bge.s      IL_0022

            //IL_008a:  ldarg.1
            //IL_008b:  ldloc.2
            //IL_008c:  stind.i4
            //IL_008d:  ldc.i4.1
            //IL_008e:  ret
            int V_0;
            char* V_1;
            uint V_2, V_3;
            V_0 = number.scale;
            //0-9:48-57,A-F:65-70,a-f:97-102
            if (V_0 <= 10)
            {
                if (V_0 >= number.precision)
                {
                    V_1 = number.digits;
                    V_2 = 0;
                    //无条件跳往IL_0082
                    //IL_0082
                    for (--V_0;/*IL_0082*/V_0 >= 0;/*IL_0088*/V_0--/*IL_0082*/) //跳往IL_0022
                    {
                        if (V_2 <= 0xfffffff)//IL_0022
                        {
                            V_2 = V_2 * 16;
                            if (*V_1 != '\x0000')//如果条件不满足跳往IL_0082
                            {
                                V_3 = V_2;//IL_0035
                                if (*V_1 != '\x0000')//如果条件不满足跳往IL_007a
                                {
                                    if (*V_1 < '0' || *V_1 > '9')//跳往IL_0051
                                    {
                                        if (*V_1 < 'A' || *V_1 > 'F')//跳往IL_006a
                                        {
                                            V_3 = V_3 + (*V_1 - 'a' + 10);
                                            //IL_0075
                                        }
                                        else
                                        {
                                            //IL_005d
                                            V_3 = V_3 + ((*V_1 - 'A') + 10);
                                            //无条件跳往//IL_0075
                                        }
                                    }
                                    else
                                    {
                                        V_3 = V_3 + (*V_1 - '0');
                                        //无条件跳往IL_0075                                        
                                    }

                                    V_1 = V_1 + 2;//IL_0075
                                    //IL_007a               
                                }
                                if (V_3 >= V_2)//IL_007a,跳往IL_0080
                                {
                                    V_2 = V_3;//IL_0080
                                    //IL_0082
                                }
                                else
                                {
                                    return false;//IL_007e
                                }
                            }

                        }
                        else
                        {
                            return false;
                        }
                    }

                    @value = V_2; //IL_008a
                    return true;

                }                
            }
            return false;
        }
        private static bool HexNumberToUInt64(ref NumberBuffer number, ref ulong @value)
        {
            //.maxstack  3
            //.locals init (int32 V_0,
            //         char* V_1,
            //         uint64 V_2,
            //         uint64 V_3)
            //IL_0000:  ldarg.0
            //IL_0001:  ldfld      int32 System.Number/NumberBuffer::scale
            //IL_0006:  stloc.0
            //IL_0007:  ldloc.0
            //IL_0008:  ldc.i4.s   20
            //IL_000a:  bgt.s      IL_0015

            //IL_000c:  ldloc.0
            //IL_000d:  ldarg.0
            //IL_000e:  ldfld      int32 System.Number/NumberBuffer::precision
            //IL_0013:  bge.s      IL_0017

            //IL_0015:  ldc.i4.0
            //IL_0016:  ret

            //IL_0017:  ldarg.0
            //IL_0018:  ldfld      char* System.Number/NumberBuffer::digits
            //IL_001d:  stloc.1
            //IL_001e:  ldc.i4.0
            //IL_001f:  conv.i8
            //IL_0020:  stloc.2
            //IL_0021:  br.s       IL_008b

            //IL_0023:  ldloc.2
            //IL_0024:  ldc.i8     0xfffffffffffffff
            //IL_002d:  ble.un.s   IL_0031

            //IL_002f:  ldc.i4.0
            //IL_0030:  ret

            //IL_0031:  ldloc.2
            //IL_0032:  ldc.i4.s   16
            //IL_0034:  conv.i8
            //IL_0035:  mul
            //IL_0036:  stloc.2
            //IL_0037:  ldloc.1
            //IL_0038:  ldind.u2
            //IL_0039:  brfalse.s  IL_008b

            //IL_003b:  ldloc.2
            //IL_003c:  stloc.3
            //IL_003d:  ldloc.1
            //IL_003e:  ldind.u2
            //IL_003f:  brfalse.s  IL_0083

            //IL_0041:  ldloc.1
            //IL_0042:  ldind.u2
            //IL_0043:  ldc.i4.s   48
            //IL_0045:  blt.s      IL_0058

            //IL_0047:  ldloc.1
            //IL_0048:  ldind.u2
            //IL_0049:  ldc.i4.s   57
            //IL_004b:  bgt.s      IL_0058

            //IL_004d:  ldloc.3
            //IL_004e:  ldloc.1
            //IL_004f:  ldind.u2
            //IL_0050:  ldc.i4.s   48
            //IL_0052:  sub
            //IL_0053:  conv.i8
            //IL_0054:  add
            //IL_0055:  stloc.3
            //IL_0056:  br.s       IL_007e

            //IL_0058:  ldloc.1
            //IL_0059:  ldind.u2
            //IL_005a:  ldc.i4.s   65
            //IL_005c:  blt.s      IL_0072

            //IL_005e:  ldloc.1
            //IL_005f:  ldind.u2
            //IL_0060:  ldc.i4.s   70
            //IL_0062:  bgt.s      IL_0072

            //IL_0064:  ldloc.3
            //IL_0065:  ldloc.1
            //IL_0066:  ldind.u2
            //IL_0067:  ldc.i4.s   65
            //IL_0069:  sub
            //IL_006a:  ldc.i4.s   10
            //IL_006c:  add
            //IL_006d:  conv.i8
            //IL_006e:  add
            //IL_006f:  stloc.3
            //IL_0070:  br.s       IL_007e

            //IL_0072:  ldloc.3
            //IL_0073:  ldloc.1
            //IL_0074:  ldind.u2
            //IL_0075:  ldc.i4.s   97
            //IL_0077:  sub
            //IL_0078:  ldc.i4.s   10
            //IL_007a:  add
            //IL_007b:  conv.i8
            //IL_007c:  add
            //IL_007d:  stloc.3
            //IL_007e:  ldloc.1
            //IL_007f:  ldc.i4.2
            //IL_0080:  conv.i
            //IL_0081:  add
            //IL_0082:  stloc.1
            //IL_0083:  ldloc.3
            //IL_0084:  ldloc.2
            //IL_0085:  bge.un.s   IL_0089

            //IL_0087:  ldc.i4.0
            //IL_0088:  ret

            //IL_0089:  ldloc.3
            //IL_008a:  stloc.2
            //IL_008b:  ldloc.0
            //IL_008c:  ldc.i4.1
            //IL_008d:  sub
            //IL_008e:  dup
            //IL_008f:  stloc.0
            //IL_0090:  ldc.i4.0
            //IL_0091:  bge.s      IL_0023

            //IL_0093:  ldarg.1
            //IL_0094:  ldloc.2
            //IL_0095:  stind.i8
            //IL_0096:  ldc.i4.1
            //IL_0097:  ret


            int V_0;
            char* V_1;
            ulong V_2, V_3;
            V_0 = number.scale;
            //0-9:48-57,A-F:65-70,a-f:97-102
            if (V_0 <= 20)
            {
                if (V_0 >= number.precision)
                {
                    V_1 = number.digits;
                    V_2 = 0;
                    //无条件跳往IL_008b
                    //IL_008b
                    for (--V_0;/*IL_008b*/V_0 >= 0;/*IL_0091*/V_0--/*IL_008b*/) //跳往IL_0023
                    {
                        if (V_2 <= 0xfffffffffffffff)//IL_0023
                        {
                            V_2 = V_2 * 16;
                            if (*V_1 != '\x0000')//如果条件不满足跳往IL_008b
                            {
                                V_3 = V_2;//IL_003b
                                if (*V_1 != '\x0000')//如果条件不满足跳往IL_0083
                                {
                                    if (*V_1 < '0' || *V_1 > '9')//跳往IL_0058
                                    {
                                        if (*V_1 < 'A' || *V_1 > 'F')//跳往IL_0072
                                        {
                                            V_3 = V_3 + (*V_1 - 'a' + 10);//IL_0072
                                            //IL_007e
                                        }
                                        else
                                        {
                                            //IL_005d
                                            V_3 = V_3 + ((*V_1 - 'A') + 10);
                                            //无条件跳往//IL_007e
                                        }
                                    }
                                    else
                                    {
                                        V_3 = V_3 + (*V_1 - '0');
                                        //无条件跳往IL_007e                                       
                                    }
                                    //IL_007e
                                    V_1 = V_1 + 2;
                                    //IL_0083               
                                }
                                if (V_3 >= V_2)//IL_0083,跳往IL_0089
                                {
                                    V_2 = V_3;//IL_0089
                                    //IL_008b
                                }
                                else
                                {
                                    return false;//IL_0087
                                }
                            }

                        }
                        else
                        {
                            return false;
                        }
                    }

                    @value = V_2; //IL_0093
                    return true;

                }                
            }
            return false;
        }
        private static bool IsWhite(char ch)
        {
            //.maxstack  8
            //IL_0000:  ldarg.0
            //IL_0001:  ldc.i4.s   32
            //IL_0003:  beq.s      IL_0015

            //IL_0005:  ldarg.0
            //IL_0006:  ldc.i4.s   9
            //IL_0008:  blt.s      IL_0013

            //IL_000a:  ldarg.0
            //IL_000b:  ldc.i4.s   13
            //IL_000d:  cgt
            //IL_000f:  ldc.i4.0
            //IL_0010:  ceq
            //IL_0012:  ret

            //IL_0013:  ldc.i4.0
            //IL_0014:  ret

            //IL_0015:  ldc.i4.1
            //IL_0016:  ret
            

            //U+0009 HT character tabulation (tab) 
            //U+000A LF line feed 
            //U+000B VT line tabulation (vertical tab) 
            //U+000C FF form feed 
            //U+000D CR carriage return 
            //U+0020    space

            if (ch == '\x0032')
            {
                return true;
            }
            else if(ch >='\x0009'&&ch <= '\x0013' )
            {
                return true;
            }    
            else return false;
   

        }
        private static bool NumberToInt32(ref NumberBuffer number, ref int @value)
        {
            //.maxstack  4
            //.locals init (int32 V_0,                              
            //         char* V_1,
            //         int32 V_2)
            //IL_0000:  ldarg.0                         
            //IL_0001:  ldfld      int32 System.Number/NumberBuffer::scale
            //IL_0006:  stloc.0
            //IL_0007:  ldloc.0
            //IL_0008:  ldc.i4.s   10
            //IL_000a:  bgt.s      IL_0015

            //IL_000c:  ldloc.0
            //IL_000d:  ldarg.0
            //IL_000e:  ldfld      int32 System.Number/NumberBuffer::precision
            //IL_0013:  bge.s      IL_0017

            //IL_0015:  ldc.i4.0
            //IL_0016:  ret

            //IL_0017:  ldarg.0                                             
            //IL_0018:  ldfld      char* System.Number/NumberBuffer::digits
            //IL_001d:  stloc.1
            //IL_001e:  ldc.i4.0
            //IL_001f:  stloc.2
            //IL_0020:  br.s       IL_0042

            //IL_0022:  ldloc.2                      
            //IL_0023:  ldc.i4     0xccccccc
            //IL_0028:  ble.un.s   IL_002c

            //IL_002a:  ldc.i4.0
            //IL_002b:  ret

            //IL_002c:  ldloc.2                
            //IL_002d:  ldc.i4.s   10
            //IL_002f:  mul
            //IL_0030:  stloc.2
            //IL_0031:  ldloc.1
            //IL_0032:  ldind.u2
            //IL_0033:  brfalse.s  IL_0042

            //IL_0035:  ldloc.2               
            //IL_0036:  ldloc.1
            //IL_0037:  dup
            //IL_0038:  ldc.i4.2
            //IL_0039:  conv.i
            //IL_003a:  add
            //IL_003b:  stloc.1
            //IL_003c:  ldind.u2
            //IL_003d:  ldc.i4.s   48
            //IL_003f:  sub
            //IL_0040:  add
            //IL_0041:  stloc.2
            //IL_0042:  ldloc.0                           
            //IL_0043:  ldc.i4.1
            //IL_0044:  sub
            //IL_0045:  dup
            //IL_0046:  stloc.0
            //IL_0047:  ldc.i4.0
            //IL_0048:  bge.s      IL_0022

            //IL_004a:  ldarg.0               
            //IL_004b:  ldfld      bool System.Number/NumberBuffer::sign
            //IL_0050:  brfalse.s  IL_005b

            //IL_0052:  ldloc.2               
            //IL_0053:  neg
            //IL_0054:  stloc.2
            //IL_0055:  ldloc.2
            //IL_0056:  ldc.i4.0
            //IL_0057:  ble.s      IL_0061

            //IL_0059:  ldc.i4.0
            //IL_005a:  ret

            //IL_005b:  ldloc.2
            //IL_005c:  ldc.i4.0
            //IL_005d:  bge.s      IL_0061

            //IL_005f:  ldc.i4.0
            //IL_0060:  ret

            //IL_0061:  ldarg.1
            //IL_0062:  ldloc.2
            //IL_0063:  stind.i4
            //IL_0064:  ldc.i4.1
            //IL_0065:  ret
            int V_0; char* V_1; int V_2;
            V_0=number.scale;
            if(V_0<=10)
            {
                if (V_0 >= number.precision)
                {
                    V_1 = number.digits; 
                    V_2 = 0;
                    //IL_0020,无条件跳往IL_0042
                    

                    for (--V_0;/*IL_0042*/ ; V_0--/*IL_0042*/)
                    {                        
                        if (V_0 >= 0)//IL_0048,跳往IL_0022
                        {
                            if ((uint)V_2 <= (uint)0xccccccc)//IL_0022,跳往IL_002c
                            {
                                V_2 = V_2 * 10;                                
                                if (*V_1 != '\0')
                                {
                                    V_2 = V_2 + (*V_1 - 48);
                                    V_1 = V_1 + 2;
                                }
                                continue;
                            }
                            else
                            {
                                return false;
                            }
                        }
                        else
                        {
                            //IL_004a
                            if (!number.sign)//跳往IL_005b
                            {
                                if (V_2 >= 0)//跳往IL_0061
                                {
                                    @value = V_2;
                                    return true;
                                }
                                else
                                {
                                    return false;
                                }
                            }
                            else
                            {
                                //IL_0052:
                                V_2 = ~(V_2);
                                if (V_2 <= 0) //跳往IL_0061
                                {
                                    @value = V_2;
                                    return true;
                                }
                                else
                                {
                                    return false;
                                }
                            }
                        }
                    }



                }                 
            }
            else
            {
                return false;
            }




        }
        private static bool NumberToInt64(ref NumberBuffer number, ref long @value)
        {
            //.maxstack  4
            //.locals init (int32 V_0,
            //         char* V_1,
            //         int64 V_2)
            //IL_0000:  ldarg.0
            //IL_0001:  ldfld      int32 System.Number/NumberBuffer::scale
            //IL_0006:  stloc.0
            //IL_0007:  ldloc.0
            //IL_0008:  ldc.i4.s   19
            //IL_000a:  bgt.s      IL_0015

            //IL_000c:  ldloc.0
            //IL_000d:  ldarg.0
            //IL_000e:  ldfld      int32 System.Number/NumberBuffer::precision
            //IL_0013:  bge.s      IL_0017

            //IL_0015:  ldc.i4.0
            //IL_0016:  ret

            //IL_0017:  ldarg.0
            //IL_0018:  ldfld      char* System.Number/NumberBuffer::digits
            //IL_001d:  stloc.1
            //IL_001e:  ldc.i4.0
            //IL_001f:  conv.i8
            //IL_0020:  stloc.2
            //IL_0021:  br.s       IL_0049

            //IL_0023:  ldloc.2
            //IL_0024:  ldc.i8     0xccccccccccccccc
            //IL_002d:  ble.un.s   IL_0031

            //IL_002f:  ldc.i4.0
            //IL_0030:  ret

            //IL_0031:  ldloc.2
            //IL_0032:  ldc.i4.s   10
            //IL_0034:  conv.i8
            //IL_0035:  mul
            //IL_0036:  stloc.2
            //IL_0037:  ldloc.1
            //IL_0038:  ldind.u2
            //IL_0039:  brfalse.s  IL_0049

            //IL_003b:  ldloc.2
            //IL_003c:  ldloc.1
            //IL_003d:  dup
            //IL_003e:  ldc.i4.2
            //IL_003f:  conv.i
            //IL_0040:  add
            //IL_0041:  stloc.1
            //IL_0042:  ldind.u2
            //IL_0043:  ldc.i4.s   48
            //IL_0045:  sub
            //IL_0046:  conv.i8
            //IL_0047:  add
            //IL_0048:  stloc.2
            //IL_0049:  ldloc.0
            //IL_004a:  ldc.i4.1
            //IL_004b:  sub
            //IL_004c:  dup
            //IL_004d:  stloc.0
            //IL_004e:  ldc.i4.0
            //IL_004f:  bge.s      IL_0023

            //IL_0051:  ldarg.0
            //IL_0052:  ldfld      bool System.Number/NumberBuffer::sign
            //IL_0057:  brfalse.s  IL_0063

            //IL_0059:  ldloc.2
            //IL_005a:  neg
            //IL_005b:  stloc.2
            //IL_005c:  ldloc.2
            //IL_005d:  ldc.i4.0
            //IL_005e:  conv.i8
            //IL_005f:  ble.s      IL_006a

            //IL_0061:  ldc.i4.0
            //IL_0062:  ret

            //IL_0063:  ldloc.2
            //IL_0064:  ldc.i4.0
            //IL_0065:  conv.i8
            //IL_0066:  bge.s      IL_006a

            //IL_0068:  ldc.i4.0
            //IL_0069:  ret

            //IL_006a:  ldarg.1
            //IL_006b:  ldloc.2
            //IL_006c:  stind.i8
            //IL_006d:  ldc.i4.1
            //IL_006e:  ret
            int V_0; char* V_1; long V_2;
            V_0 = number.scale;
            if (V_0 <= 19)
            {
                if (V_0 >= number.precision)
                {
                    V_1 = number.digits;
                    V_2 = 0;
                    //IL_0020,无条件跳往IL_0049


                    for (--V_0;/*IL_0049*/ ; V_0--/*IL_0049*/)
                    {
                        if (V_0 >= 0)//IL_004f,跳往IL_0023
                        {
                            if ((ulong)V_2 <= 0xcccccccccccccccul)//IL_0023,跳往IL_0031
                            {
                                V_2 = V_2 * 10;
                                if (*V_1 != '\0')
                                {
                                    V_2 = V_2 + (*V_1 - 48);
                                    V_1 = V_1 + 2;
                                }
                                continue;
                            }
                            else
                            {
                                return false;
                            }
                        }
                        else
                        {
                            //IL_0051
                            if (!number.sign)//跳往IL_0063
                            {
                                if (V_2 >= 0)//跳往IL_006a
                                {
                                    @value = V_2;
                                    return true;
                                }
                                else
                                {
                                    return false;
                                }
                            }
                            else
                            {
                                //IL_0059:
                                V_2 = ~(V_2);
                                if (V_2 <= 0) //IL_006a
                                {
                                    @value = V_2;
                                    return true;
                                }
                                else
                                {
                                    return false;
                                }
                            }
                        }
                    }



                }
            }
            return false;          


        }
        private static bool NumberToUInt32(ref NumberBuffer number, ref uint @value)
        {
            //.maxstack  4
            //.locals init (int32 V_0,                  
            //         char* V_1,
            //         uint32 V_2,
            //         uint32 V_3)
            //IL_0000:  ldarg.0                                      
            //IL_0001:  ldfld      int32 System.Number/NumberBuffer::scale
            //IL_0006:  stloc.0
            //IL_0007:  ldloc.0
            //IL_0008:  ldc.i4.s   10
            //IL_000a:  bgt.s      IL_001d

            //IL_000c:  ldloc.0
            //IL_000d:  ldarg.0
            //IL_000e:  ldfld      int32 System.Number/NumberBuffer::precision
            //IL_0013:  blt.s      IL_001d

            //IL_0015:  ldarg.0
            //IL_0016:  ldfld      bool System.Number/NumberBuffer::sign
            //IL_001b:  brfalse.s  IL_001f

            //IL_001d:  ldc.i4.0
            //IL_001e:  ret

            //IL_001f:  ldarg.0
            //IL_0020:  ldfld      char* System.Number/NumberBuffer::digits
            //IL_0025:  stloc.1
            //IL_0026:  ldc.i4.0
            //IL_0027:  stloc.2
            //IL_0028:  br.s       IL_0052

            //IL_002a:  ldloc.2
            //IL_002b:  ldc.i4     0x19999999
            //IL_0030:  ble.un.s   IL_0034

            //IL_0032:  ldc.i4.0
            //IL_0033:  ret

            //IL_0034:  ldloc.2
            //IL_0035:  ldc.i4.s   10
            //IL_0037:  mul
            //IL_0038:  stloc.2
            //IL_0039:  ldloc.1
            //IL_003a:  ldind.u2
            //IL_003b:  brfalse.s  IL_0052

            //IL_003d:  ldloc.2
            //IL_003e:  ldloc.1
            //IL_003f:  dup
            //IL_0040:  ldc.i4.2
            //IL_0041:  conv.i
            //IL_0042:  add
            //IL_0043:  stloc.1
            //IL_0044:  ldind.u2
            //IL_0045:  ldc.i4.s   48
            //IL_0047:  sub
            //IL_0048:  add
            //IL_0049:  stloc.3
            //IL_004a:  ldloc.3                
            //IL_004b:  ldloc.2
            //IL_004c:  bge.un.s   IL_0050

            //IL_004e:  ldc.i4.0
            //IL_004f:  ret

            //IL_0050:  ldloc.3
            //IL_0051:  stloc.2
            //IL_0052:  ldloc.0
            //IL_0053:  ldc.i4.1
            //IL_0054:  sub
            //IL_0055:  dup
            //IL_0056:  stloc.0
            //IL_0057:  ldc.i4.0
            //IL_0058:  bge.s      IL_002a

            //IL_005a:  ldarg.1
            //IL_005b:  ldloc.2
            //IL_005c:  stind.i4
            //IL_005d:  ldc.i4.1
            //IL_005e:  ret
            int V_0;
            char* V_1;
            uint V_2, V_3;            
            V_0 = number.scale;
            if (V_0 <= 10)
            {
                if (V_0 >= number.precision)
                {
                    if (!number.sign)
                    {
                        V_1 = number.digits;
                        V_2 = 0;
                        //IL_0028,无条件跳往IL_0052
                        for (--V_0;/*IL_0052*/ ; V_0--/*IL_0052*/)
                        {
                            if (V_0 >= 0)//IL_0058,跳往IL_002a
                            {
                                if ((uint)V_2 <= (uint)0x19999999)//IL_002a,跳往IL_0034
                                {
                                    V_2 = V_2 * 10;
                                    if (*V_1 != '\0')
                                    {
                                        
                                        V_3 = V_2 + (*V_1 - 48);
                                        V_1 = V_1 + 2;
                                        if(V_3>=V_2)
                                        {
                                            V_2 = V_3; 
                                            //IL_0052
                                        }
                                        else
                                        {
                                            return false;
                                        }
                                    }
                                    continue;
                                }
                                else
                                {
                                    return false;
                                }
                            }
                            else
                            {
                                //IL_005a                               
                                @value = V_2;
                                return true;                                   
                            }
                        }
                    }
                }
            }
            else
            {
                return false;
            }



        }
        private static bool NumberToUInt64(ref NumberBuffer number, ref ulong @value)
        {
            //.maxstack  4
            //.locals init (int32 V_0,
            //         char* V_1,
            //         uint64 V_2,
            //         uint64 V_3)
            //IL_0000:  ldarg.0
            //IL_0001:  ldfld      int32 System.Number/NumberBuffer::scale
            //IL_0006:  stloc.0
            //IL_0007:  ldloc.0
            //IL_0008:  ldc.i4.s   20
            //IL_000a:  bgt.s      IL_001d

            //IL_000c:  ldloc.0
            //IL_000d:  ldarg.0
            //IL_000e:  ldfld      int32 System.Number/NumberBuffer::precision
            //IL_0013:  blt.s      IL_001d

            //IL_0015:  ldarg.0
            //IL_0016:  ldfld      bool System.Number/NumberBuffer::sign
            //IL_001b:  brfalse.s  IL_001f

            //IL_001d:  ldc.i4.0
            //IL_001e:  ret

            //IL_001f:  ldarg.0
            //IL_0020:  ldfld      char* System.Number/NumberBuffer::digits
            //IL_0025:  stloc.1
            //IL_0026:  ldc.i4.0
            //IL_0027:  conv.i8
            //IL_0028:  stloc.2
            //IL_0029:  br.s       IL_0059

            //IL_002b:  ldloc.2
            //IL_002c:  ldc.i8     0x1999999999999999
            //IL_0035:  ble.un.s   IL_0039

            //IL_0037:  ldc.i4.0
            //IL_0038:  ret

            //IL_0039:  ldloc.2
            //IL_003a:  ldc.i4.s   10
            //IL_003c:  conv.i8
            //IL_003d:  mul
            //IL_003e:  stloc.2
            //IL_003f:  ldloc.1
            //IL_0040:  ldind.u2
            //IL_0041:  brfalse.s  IL_0059

            //IL_0043:  ldloc.2
            //IL_0044:  ldloc.1
            //IL_0045:  dup
            //IL_0046:  ldc.i4.2
            //IL_0047:  conv.i
            //IL_0048:  add
            //IL_0049:  stloc.1
            //IL_004a:  ldind.u2
            //IL_004b:  ldc.i4.s   48
            //IL_004d:  sub
            //IL_004e:  conv.i8
            //IL_004f:  add
            //IL_0050:  stloc.3
            //IL_0051:  ldloc.3
            //IL_0052:  ldloc.2
            //IL_0053:  bge.un.s   IL_0057

            //IL_0055:  ldc.i4.0
            //IL_0056:  ret

            //IL_0057:  ldloc.3
            //IL_0058:  stloc.2
            //IL_0059:  ldloc.0
            //IL_005a:  ldc.i4.1
            //IL_005b:  sub
            //IL_005c:  dup
            //IL_005d:  stloc.0
            //IL_005e:  ldc.i4.0
            //IL_005f:  bge.s      IL_002b

            //IL_0061:  ldarg.1
            //IL_0062:  ldloc.2
            //IL_0063:  stind.i8
            //IL_0064:  ldc.i4.1
            //IL_0065:  ret
            int V_0;
            char* V_1;
            ulong V_2, V_3;
            V_0 = number.scale;
            if (V_0 <= 20)
            {
                if (V_0 >= number.precision)
                {
                    if (!number.sign)
                    {
                        V_1 = number.digits;
                        V_2 = 0;
                        //IL_0029,无条件跳往IL_0059
                        for (--V_0;/*IL_0059*/ ; V_0--/*IL_0059*/)
                        {
                            if (V_0 >= 0)//IL_005f,跳往IL_002b
                            {
                                if (V_2 <= (ulong)0x1999999999999999)//IL_0035,跳往IL_0039
                                {
                                    V_2 = V_2 * 10;
                                    if (*V_1 != '\0')
                                    {

                                        V_3 = V_2 + (*V_1 - 48);
                                        V_1 = V_1 + 2;
                                        if (V_3 >= V_2)
                                        {
                                            V_2 = V_3;
                                            //IL_0052
                                        }
                                        else
                                        {
                                            return false;
                                        }
                                    }
                                    continue;
                                }
                                else
                                {
                                    return false;
                                }
                            }
                            else
                            {
                                //IL_005a                               
                                @value = V_2;
                                return true;
                            }
                        }
                    }
                }
            }
            else
            {
                return false;
            }


        }
        private unsafe static char* MatchChars(char* p, string str)
        {
            //.maxstack  2
            //.locals init (char* V_0,
            //         char* V_1,
            //         string pinned V_2)
            //IL_0000:  ldarg.1
            //IL_0001:  stloc.2
            //IL_0002:  ldloc.2
            //IL_0003:  conv.i
            //IL_0004:  dup
            //IL_0005:  brfalse.s  IL_000d

            //IL_0007:  call       int32 System.Runtime.CompilerServices.RuntimeHelpers::get_OffsetToStringData()
            //IL_000c:  add
            //IL_000d:  stloc.0
            //IL_000e:  ldarg.0
            //IL_000f:  ldloc.0
            //IL_0010:  call       char* System.Number::MatchChars(char*,
            //                                                     char*)
            //IL_0015:  stloc.1
            //IL_0016:  leave.s    IL_0018

            //IL_0018:  ldloc.1
            //IL_0019:  ret
            char* V_0,V_1;            
            fixed(string V_2 = str)
            {                
                if(V_2==null)
                {
                    //IL_000d
                    V_0 = &V_2;                    
                }
                else
                {
                    V_0=&V_2+RuntimeHelpers.OffsetToStringData();
                }
                V_1=Number.MatchChars(p, V_0);
                return V_1;
            }

        }
        private unsafe static char* MatchChars(char* p, char* str)
        {
            //.maxstack  8
            //IL_0000:  ldarg.1
            //IL_0001:  ldind.u2
            //IL_0002:  brtrue.s   IL_002b                           

            //IL_0004:  ldc.i4.0
            //IL_0005:  conv.u
            //IL_0006:  ret

            //IL_0007:  ldarg.0                    
            //IL_0008:  ldind.u2
            //IL_0009:  ldarg.1
            //IL_000a:  ldind.u2
            //IL_000b:  beq.s      IL_001f

            //IL_000d:  ldarg.1                                               
            //IL_000e:  ldind.u2
            //IL_000f:  ldc.i4     0xa0
            //IL_0014:  bne.un.s   IL_001c

            //IL_0016:  ldarg.0
            //IL_0017:  ldind.u2
            //IL_0018:  ldc.i4.s   32
            //IL_001a:  beq.s      IL_001f

            //IL_001c:  ldc.i4.0
            //IL_001d:  conv.u
            //IL_001e:  ret

            //IL_001f:  ldarg.0                                   
            //IL_0020:  ldc.i4.2
            //IL_0021:  conv.i
            //IL_0022:  add
            //IL_0023:  starg.s    p
            //IL_0025:  ldarg.1
            //IL_0026:  ldc.i4.2
            //IL_0027:  conv.i
            //IL_0028:  add
            //IL_0029:  starg.s    str
            //IL_002b:  ldarg.1
            //IL_002c:  ldind.u2
            //IL_002d:  brtrue.s   IL_0007

            //IL_002f:  ldarg.0
            //IL_0030:  ret
            if (*str != 0) //跳往IL_002b
            {                
                while (*str != 0)
                {
                    if ((*p == *str) || (*str == 0xa0 && *p == 32))   //IL_0007,跳往IL_001f
                    {
                        p = p + 2;
                        str = str + 2;
                        continue;
                    }
                    else
                    {
                        //IL_001c
                        return &null;
                    }
                }
                return p;               
            } 
            else 
            {
                //IL_0004
                return &null; 
            }


        }
        internal static decimal ParseDecimal(string @value, NumberStyles options, NumberFormatInfo numfmt)
        {
            //.maxstack  5
            //.locals init (uint8* V_0,                                 
            //         valuetype System.Number/NumberBuffer V_1,
            //         valuetype System.Decimal V_2)
            //IL_0000:  ldc.i4.1                        
            //IL_0001:  ldc.i4.s   114
            //IL_0003:  mul
            //IL_0004:  localloc
            //IL_0006:  stloc.0                      
            //IL_0007:  ldloca.s   V_1
            //IL_0009:  ldloc.0
            //IL_000a:  newobj     instance void System.Number/NumberBuffer::.ctor(uint8*)
            //IL_000f:  stobj      System.Number/NumberBuffer
            //IL_0014:  ldc.i4.0
            //IL_0015:  newobj     instance void System.Decimal::.ctor(int32)
            //IL_001a:  stloc.2
            //IL_001b:  ldarg.0                  
            //IL_001c:  ldarg.1
            //IL_001d:  ldloca.s   V_1
            //IL_001f:  ldarg.2
            //IL_0020:  ldc.i4.1
            //IL_0021:  call       void System.Number::StringToNumber(string,
            //                                                        valuetype System.Globalization.NumberStyles,
            //                                                        valuetype System.Number/NumberBuffer&,
            //                                                        class System.Globalization.NumberFormatInfo,
            //                                                        bool)
            //IL_0026:  ldloca.s   V_1
            //IL_0028:  call       instance uint8* System.Number/NumberBuffer::PackForNative()
            //IL_002d:  ldloca.s   V_2
            //IL_002f:  call       bool System.Number::NumberBufferToDecimal(uint8*,
            //                                                               valuetype System.Decimal&)
            //IL_0034:  brtrue.s   IL_0046

            //IL_0036:  ldstr      "Overflow_Decimal"
            //IL_003b:  call       string System.Environment::GetResourceString(string)
            //IL_0040:  newobj     instance void System.OverflowException::.ctor(string)
            //IL_0045:  throw

            //IL_0046:  ldloc.2
            //IL_0047:  ret
            byte* V_0 = stackalloc byte[1 * 114];
            NumberBuffer V_1; 
            decimal V_2;
            V_1=new NumberBuffer(V_0);
            V_2 = new Decimal(0);
            Number.StringToNumber(@value, options, ref V_1, numfmt, true);
            if (Number.NumberBufferToDecimal(V_1.PackForNative(), ref V_2))
            {
                return V_2;
            }
            else
            {
                throw new OverflowException(System.Environment.GetResourceString("Overflow_Decimal"));
            }

        }
        internal static double ParseDouble(string @value, NumberStyles options, NumberFormatInfo numfmt)
        {
            //.maxstack  5
            //.locals init (uint8* V_0,                                          
            //         valuetype System.Number/NumberBuffer V_1,
            //         float64 V_2)
            //IL_0000:  ldc.i4.1                           
            //IL_0001:  ldc.i4.s   114
            //IL_0003:  mul
            //IL_0004:  localloc
            //IL_0006:  stloc.0
            //IL_0007:  ldloca.s   V_1
            //IL_0009:  ldloc.0
            //IL_000a:  newobj     instance void System.Number/NumberBuffer::.ctor(uint8*)
            //IL_000f:  stobj      System.Number/NumberBuffer
            //IL_0014:  ldc.r8     0.0
            //IL_001d:  stloc.2
            //IL_001e:  ldarg.0
            //IL_001f:  ldarg.1
            //IL_0020:  ldloca.s   V_1
            //IL_0022:  ldarg.2
            //IL_0023:  ldc.i4.0
            //IL_0024:  call       void System.Number::StringToNumber(string,
            //                                                        valuetype System.Globalization.NumberStyles,
            //                                                        valuetype System.Number/NumberBuffer&,
            //                                                        class System.Globalization.NumberFormatInfo,
            //                                                        bool)
            //IL_0029:  ldloca.s   V_1
            //IL_002b:  call       instance uint8* System.Number/NumberBuffer::PackForNative()
            //IL_0030:  ldloca.s   V_2
            //IL_0032:  call       bool System.Number::NumberBufferToDouble(uint8*,
            //                                                              float64&)
            //IL_0037:  brtrue.s   IL_0049

            //IL_0039:  ldstr      "Overflow_Double"
            //IL_003e:  call       string System.Environment::GetResourceString(string)
            //IL_0043:  newobj     instance void System.OverflowException::.ctor(string)
            //IL_0048:  throw

            //IL_0049:  ldloc.2
            //IL_004a:  ret
            byte* V_0 = stackalloc byte[1 * 114]; 
            NumberBuffer V_1; 
            double V_2;
            V_1 = new System.Number.NumberBuffer(V_0); 
            V_2 = 0.0d;
            System.Number.StringToNumber(@value, options, ref V_1, numfmt, fals);
            if (System.Number.NumberBufferToDouble(V_1.PackForNative(), ref V_2))
            {
                return V_2;
            }
            else
            {
                throw new System.OverflowException(System.Environment.GetResourceString("Overflow_Double"));
            }


        }
        internal static int ParseInt32(string s, NumberStyles style, NumberFormatInfo info)
        {
            //.maxstack  5
            //.locals init (uint8* V_0,            
            //         valuetype System.Number/NumberBuffer V_1,
            //         int32 V_2)
            //IL_0000:  ldc.i4.1
            //IL_0001:  ldc.i4.s   114
            //IL_0003:  mul
            //IL_0004:  localloc
            //IL_0006:  stloc.0
            //IL_0007:  ldloca.s   V_1
            //IL_0009:  ldloc.0
            //IL_000a:  newobj     instance void System.Number/NumberBuffer::.ctor(uint8*)
            //IL_000f:  stobj      System.Number/NumberBuffer
            //IL_0014:  ldc.i4.0
            //IL_0015:  stloc.2
            //IL_0016:  ldarg.0                       
            //IL_0017:  ldarg.1
            //IL_0018:  ldloca.s   V_1
            //IL_001a:  ldarg.2
            //IL_001b:  ldc.i4.0
            //IL_001c:  call       void System.Number::StringToNumber(string,
            //                                                        valuetype System.Globalization.NumberStyles,
            //                                                        valuetype System.Number/NumberBuffer&,
            //                                                        class System.Globalization.NumberFormatInfo,
            //                                                        bool)
            //IL_0021:  ldarg.1                                     
            //IL_0022:  ldc.i4     0x200
            //IL_0027:  and
            //IL_0028:  brfalse.s  IL_0045

            //IL_002a:  ldloca.s   V_1
            //IL_002c:  ldloca.s   V_2
            //IL_002e:  call       bool System.Number::HexNumberToInt32(valuetype System.Number/NumberBuffer&,
            //                                                          int32&)
            //IL_0033:  brtrue.s   IL_0060

            //IL_0035:  ldstr      "Overflow_Int32"
            //IL_003a:  call       string System.Environment::GetResourceString(string)
            //IL_003f:  newobj     instance void System.OverflowException::.ctor(string)
            //IL_0044:  throw

            //IL_0045:  ldloca.s   V_1
            //IL_0047:  ldloca.s   V_2
            //IL_0049:  call       bool System.Number::NumberToInt32(valuetype System.Number/NumberBuffer&,
            //                                                       int32&)
            //IL_004e:  brtrue.s   IL_0060

            //IL_0050:  ldstr      "Overflow_Int32"
            //IL_0055:  call       string System.Environment::GetResourceString(string)
            //IL_005a:  newobj     instance void System.OverflowException::.ctor(string)
            //IL_005f:  throw

            //IL_0060:  ldloc.2
            //IL_0061:  ret
            byte* V_0 = stackalloc byte[1 * 114];
            System.Number.NumberBuffer V_1; 
            int V_2;             
            V_1=new System.Number.NumberBuffer(V_0);
            V_2=0;
            System.Number.StringToNumber(s, style, ref V_1, info, false);
            if(style&NumberStyles.AllowHexSpecifier!=0)
            {
                if(System.Number.HexNumberToInt32(ref V_1,ref V_2))
                {
                    return V_2;
                }
                else
                {
                    throw new System.OverflowException(System.Environment.GetResourceString("Overflow_Int32"));
                }
            }
            else
            {
                //IL_0045
                if (System.Number.NumberToInt32(ref V_1, ref V_2))
                {
                    return V_2;
                }
                throw new System.OverfowException(System.Environment.GetResourceString("Overflow_Int32"));
            }
        }
        internal static long ParseInt64(string @value, NumberStyles options, NumberFormatInfo numfmt)
        {
            //.maxstack  5
            //.locals init (uint8* V_0,                                    
            //         valuetype System.Number/NumberBuffer V_1,
            //         int64 V_2)
            //IL_0000:  ldc.i4.1
            //IL_0001:  ldc.i4.s   114
            //IL_0003:  mul
            //IL_0004:  localloc
            //IL_0006:  stloc.0
            //IL_0007:  ldloca.s   V_1
            //IL_0009:  ldloc.0
            //IL_000a:  newobj     instance void System.Number/NumberBuffer::.ctor(uint8*)
            //IL_000f:  stobj      System.Number/NumberBuffer
            //IL_0014:  ldc.i4.0
            //IL_0015:  conv.i8
            //IL_0016:  stloc.2
            //IL_0017:  ldarg.0
            //IL_0018:  ldarg.1
            //IL_0019:  ldloca.s   V_1
            //IL_001b:  ldarg.2
            //IL_001c:  ldc.i4.0
            //IL_001d:  call       void System.Number::StringToNumber(string,
            //                                                        valuetype System.Globalization.NumberStyles,
            //                                                        valuetype System.Number/NumberBuffer&,
            //                                                        class System.Globalization.NumberFormatInfo,
            //                                                        bool)
            //IL_0022:  ldarg.1
            //IL_0023:  ldc.i4     0x200
            //IL_0028:  and
            //IL_0029:  brfalse.s  IL_0046

            //IL_002b:  ldloca.s   V_1
            //IL_002d:  ldloca.s   V_2
            //IL_002f:  call       bool System.Number::HexNumberToInt64(valuetype System.Number/NumberBuffer&,
            //                                                          int64&)
            //IL_0034:  brtrue.s   IL_0061

            //IL_0036:  ldstr      "Overflow_Int64"
            //IL_003b:  call       string System.Environment::GetResourceString(string)
            //IL_0040:  newobj     instance void System.OverflowException::.ctor(string)
            //IL_0045:  throw

            //IL_0046:  ldloca.s   V_1
            //IL_0048:  ldloca.s   V_2
            //IL_004a:  call       bool System.Number::NumberToInt64(valuetype System.Number/NumberBuffer&,
            //                                                       int64&)
            //IL_004f:  brtrue.s   IL_0061

            //IL_0051:  ldstr      "Overflow_Int64"
            //IL_0056:  call       string System.Environment::GetResourceString(string)
            //IL_005b:  newobj     instance void System.OverflowException::.ctor(string)
            //IL_0060:  throw

            //IL_0061:  ldloc.2
            //IL_0062:  ret
            byte* V_0 = stackalloc byte[1 * 114]; 
            System.Number.NumberBuffer V_1; 
            long V_2; 
            V_1 = new System.Number.NumberBuffer(V_0); 
            V_2 = 0L; 
            System.Number.StringToNumber(@value, options, ref V_1, numfmt, false);
            if (options & NumberStyles.AllowHexSpecifier != 0)
            {
                if (System.Number.HexNumberToInt64(ref V_1, ref V_2))
                {
                    return V_2;
                }
                else
                {
                    throw new System.OverflowException(System.Environment.GetResourceString("Overflow_Int64"));
                }
            }
            else
            {
                if (System.Number.NumberToInt64(ref V_1, ref V_2))
                {
                    return V_2;
                }
                else
                {
                    throw new System.OverflowException(System.Environment.GetResourceString("Overflow_Int64"));
                }
            }

        }
        private static bool ParseNumber(ref char* str, NumberStyls options, ref NumberBuffer number, NumberFormatInfo numfmt, bool parseDecimal)
        {
            #region IL
            //.maxstack  4
            //.locals init (string V_0,                
            //         string V_1,
            //         string V_2,
            //         string V_3,
            //         string V_4,
            //         string V_5,
            //         bool V_6,
            //         int32 V_7,
            //         bool V_8,
            //         char* V_9,
            //         char V_10,
            //         char* V_11,
            //         int32 V_12,
            //         int32 V_13,
            //         bool V_14,
            //         char* V_15,
            //         int32 V_16)
            //IL_0000:  ldarg.2                             
            //IL_0001:  ldc.i4.0
            //IL_0002:  stfld      int32 System.Number/NumberBuffer::scale
            //IL_0007:  ldarg.2
            //IL_0008:  ldc.i4.0
            //IL_0009:  stfld      bool System.Number/NumberBuffer::sign
            //IL_000e:  ldnull
            //IL_000f:  stloc.2
            //IL_0010:  ldnull
            //IL_0011:  stloc.3
            //IL_0012:  ldnull
            //IL_0013:  stloc.s    V_4
            //IL_0015:  ldnull
            //IL_0016:  stloc.s    V_5
            //IL_0018:  ldc.i4.0
            //IL_0019:  stloc.s    V_6
            //IL_001b:  ldarg.1
            //IL_001c:  ldc.i4     0x100
            //IL_0021:  and
            //IL_0022:  brfalse.s  IL_005d

            //IL_0024:  ldarg.3                   
            //IL_0025:  callvirt   instance string System.Globalization.NumberFormatInfo::get_CurrencySymbol()
            //IL_002a:  stloc.2
            //IL_002b:  ldarg.3
            //IL_002c:  ldfld      string System.Globalization.NumberFormatInfo::ansiCurrencySymbol
            //IL_0031:  brfalse.s  IL_003a

            //IL_0033:  ldarg.3                
            //IL_0034:  ldfld      string System.Globalization.NumberFormatInfo::ansiCurrencySymbol
            //IL_0039:  stloc.3
            //IL_003a:  ldarg.3           
            //IL_003b:  callvirt   instance string System.Globalization.NumberFormatInfo::get_NumberDecimalSeparator()
            //IL_0040:  stloc.s    V_4
            //IL_0042:  ldarg.3
            //IL_0043:  callvirt   instance string System.Globalization.NumberFormatInfo::get_NumberGroupSeparator()
            //IL_0048:  stloc.s    V_5
            //IL_004a:  ldarg.3
            //IL_004b:  callvirt   instance string System.Globalization.NumberFormatInfo::get_CurrencyDecimalSeparator()
            //IL_0050:  stloc.0
            //IL_0051:  ldarg.3
            //IL_0052:  callvirt   instance string System.Globalization.NumberFormatInfo::get_CurrencyGroupSeparator()
            //IL_0057:  stloc.1
            //IL_0058:  ldc.i4.1
            //IL_0059:  stloc.s    V_6
            //IL_005b:  br.s       IL_006b

            //IL_005d:  ldarg.3                                 
            //IL_005e:  callvirt   instance string System.Globalization.NumberFormatInfo::get_NumberDecimalSeparator()
            //IL_0063:  stloc.0
            //IL_0064:  ldarg.3
            //IL_0065:  callvirt   instance string System.Globalization.NumberFormatInfo::get_NumberGroupSeparator()
            //IL_006a:  stloc.1
            //IL_006b:  ldc.i4.0
            //IL_006c:  stloc.s    V_7
            //IL_006e:  ldc.i4.0
            //IL_006f:  stloc.s    V_8
            //IL_0071:  ldarg.0
            //IL_0072:  ldind.i
            //IL_0073:  stloc.s    V_9
            //IL_0075:  ldloc.s    V_9                
            //IL_0077:  ldind.u2
            //IL_0078:  stloc.s    V_10
            //IL_007a:  ldloc.s    V_10
            //IL_007c:  call       bool System.Number::IsWhite(char)
            //IL_0081:  brfalse.s  IL_00ad

            //IL_0083:  ldarg.1
            //IL_0084:  ldc.i4.1
            //IL_0085:  and
            //IL_0086: brfalse.s  IL_00ad

            //IL_0088:  ldloc.s    V_7               
            //IL_008a:  ldc.i4.1
            //IL_008b:  and
            //IL_008c:  brfalse    IL_016c

            //IL_0091:  ldloc.s    V_7
            //IL_0093:  ldc.i4.1
            //IL_0094:  and
            //IL_0095:  brfalse.s  IL_00ad

            //IL_0097:  ldloc.s    V_7                    
            //IL_0099:  ldc.i4.s   32
            //IL_009b:  and
            //IL_009c:  brtrue     IL_016c

            //IL_00a1:  ldarg.3                               
            //IL_00a2:  ldfld      int32 System.Globalization.NumberFormatInfo::numberNegativePattern
            //IL_00a7:  ldc.i4.2
            //IL_00a8:  beq        IL_016c

            //IL_00ad:  ldarg.1                                     
            //IL_00ae:  ldc.i4.4
            //IL_00af:  and
            //IL_00b0:  brfalse.s  IL_00bb

            //IL_00b2:  ldloc.s    V_7                 
            //IL_00b4:  ldc.i4.1
            //IL_00b5:  and
            //IL_00b6:  ldc.i4.0
            //IL_00b7:  ceq
            //IL_00b9:  br.s       IL_00bc

            //IL_00bb:  ldc.i4.0
            //IL_00bc:  dup
            //IL_00bd:  stloc.s    V_8
            //IL_00bf:  brfalse.s  IL_00e7          

            //IL_00c1:  ldloc.s    V_9                
            //IL_00c3:  ldarg.3
            //IL_00c4:  ldfld      string System.Globalization.NumberFormatInfo::positiveSign
            //IL_00c9:  call       char* System.Number::MatchChars(char*,
            //                                                     string)
            //IL_00ce:  dup
            //IL_00cf:  stloc.s    V_11
            //IL_00d1:  ldc.i4.0
            //IL_00d2:  conv.u
            //IL_00d3:  beq.s      IL_00e7

            //IL_00d5:  ldloc.s    V_7              
            //IL_00d7:  ldc.i4.1
            //IL_00d8:  or
            //IL_00d9:  stloc.s    V_7
            //IL_00db:  ldloc.s    V_11
            //IL_00dd:  ldc.i4.2
            //IL_00de:  conv.i
            //IL_00df:  sub
            //IL_00e0:  stloc.s    V_9
            //IL_00e2:  br         IL_016c

            //IL_00e7:  ldloc.s    V_8                      
            //IL_00e9:  brfalse.s  IL_0115

            //IL_00eb:  ldloc.s    V_9                         
            //IL_00ed:  ldarg.3
            //IL_00ee:  ldfld      string System.Globalization.NumberFormatInfo::negativeSign
            //IL_00f3:  call       char* System.Number::MatchChars(char*,
            //                                                     string)
            //IL_00f8:  dup
            //IL_00f9:  stloc.s    V_11
            //IL_00fb:  ldc.i4.0
            //IL_00fc:  conv.u
            //IL_00fd:  beq.s      IL_0115

            //IL_00ff:  ldloc.s    V_7                    
            //IL_0101:  ldc.i4.1
            //IL_0102:  or
            //IL_0103:  stloc.s    V_7
            //IL_0105:  ldarg.2
            //IL_0106:  ldc.i4.1
            //IL_0107:  stfld      bool System.Number/NumberBuffer::sign
            //IL_010c:  ldloc.s    V_11
            //IL_010e:  ldc.i4.2
            //IL_010f:  conv.i
            //IL_0110:  sub
            //IL_0111:  stloc.s    V_9
            //IL_0113:  br.s       IL_016c

            //IL_0115:  ldloc.s    V_10                          
            //IL_0117:  ldc.i4.s   40
            //IL_0119:  bne.un.s   IL_0136

            //IL_011b:  ldarg.1                           
            //IL_011c:  ldc.i4.s   16
            //IL_011e:  and
            //IL_011f:  brfalse.s  IL_0136

            //IL_0121:  ldloc.s    V_7                    
            //IL_0123:  ldc.i4.1
            //IL_0124:  and
            //IL_0125:  brtrue.s   IL_0136

            //IL_0127:  ldloc.s    V_7                 
            //IL_0129:  ldc.i4.3
            //IL_012a:  or
            //IL_012b:  stloc.s    V_7
            //IL_012d:  ldarg.2
            //IL_012e:  ldc.i.1
            //IL_012f:  stfld      bool System.Number/NumberBuffer::sign
            //IL_0134:  br.s       IL_016c

            //IL_0136:  ldloc.2                              
            //IL_0137:  brfalse.s  IL_0148

            //IL_0139:  ldloc.s    V_9                           
            //IL_013b:  ldloc.2
            //IL_013c:  call       char* System.Number::MatchChars(char*,
            //                                                     string)
            //IL_0141:  dup
            //IL_0142:  stloc.s    V_11
            //IL_0144:  ldc.i4.0
            //IL_0145:  conv.u
            //IL_0146:  bne.un.s   IL_015a

            //IL_0148:  ldloc.3                                                    
            //IL_0149:  brfalse.s  IL_017c

            //IL_014b:  ldloc.s    V_9                 
            //IL_014d:  ldloc.3
            //IL_014e:  call       char* System.Number::MatchChars(char*,
            //                                                     string)
            //IL_0153:  dup
            //IL_0154:  stloc.s    V_11
            //IL_0156:  ldc.i4.0
            //IL_0157:  conv.u
            //IL_0158:  beq.s      IL_017c

            //IL_015a:  ldloc.s    V_7
            //IL_015c:  ldc.i4.s   32
            //IL_015e:  or
            //IL_015f:  stloc.s    V_7
            //IL_0161:  ldnull
            //IL_0162:  stloc.2
            //IL_0163:  ldnull
            //IL_0164:  stloc.3
            //IL_0165:  ldloc.s    V_11
            //IL_0167:  ldc.i4.2
            //IL_0168:  conv.i
            //IL_0169:  sub
            //IL_016a:  stloc.s    V_9
            //IL_016c:  ldloc.s    V_9
            //IL_016e:  ldc.i4.2
            //IL_016f:  conv.i
            //IL_0170:  add
            //IL_0171:  dup
            //IL_0172:  stloc.s    V_9
            //IL_0174:  ldind.u2
            //IL_0175:  stloc.s    V_10
            //IL_0177:  br         IL_007a

            //IL_017c:  ldc.i4.0
            //IL_017d:  stloc.s    V_12
            //IL_017f:  ldc.i4.0
            //IL_0180:  stloc.s    V_13
            //IL_0182:  ldloc.s    V_10
            //IL_0184:  ldc.i4.s   48
            //IL_0186:  blt.s      IL_018e

            //IL_0188:  ldloc.s    V_10
            //IL_018a:  ldc.i4.s   57
            //IL_018c:  ble.s      IL_01b2

            //IL_018e:  ldarg.1                   
            //IL_018f:  ldc.i4     0x200
            //IL_0194:  and
            //IL_0195:  brfalse    IL_0229

            //IL_019a:  ldloc.s    V_10         
            //IL_019c:  ldc.i4.s   97
            //IL_019e:  blt.s      IL_01a6

            //IL_01a0:  ldloc.s    V_10
            //IL_01a2:  ldc.i4.s   102
            //IL_01a4:  ble.s      IL_01b2

            //IL_01a6:  ldloc.s    V_10            
            //IL_01a8:  ldc.i4.s   65
            //IL_01aa:  blt.s      IL_0229

            //IL_01ac:  ldloc.s    V_10
            //IL_01ae:  ldc.i4.s   70
            //IL_01b0:  bgt.s      IL_0229

            //IL_01b2:  ldloc.s    V_7                
            //IL_01b4:  ldc.i4.4
            //IL_01b5:  or
            //IL_01b6:  stloc.s    V_7
            //IL_01b8:  ldloc.s    V_10
            //IL_01ba:  ldc.i4.s   48
            //IL_01bc:  bne.un.s   IL_01c4

            //IL_01be:  ldloc.s    V_7
            //IL_01c0:  ldc.i4.8
            //IL_01c1:  and
            //IL_01c2:  brfalse.s  IL_020c

            //IL_01c4:  ldloc.s    V_12                 
            //IL_01c6:  ldc.i4.s   50
            //IL_01c8:  bge.s      IL_01ec

            //IL_01ca:  ldarg.2
            //IL_01cb:  ldfld      char* System.Number/NumberBuffer::digits
            //IL_01d0:  ldloc.s    V_12
            //IL_01d2:  dup
            //IL_01d3:  ldc.i4.1
            //IL_01d4:  add
            //IL_01d5:  stloc.s    V_12
            //IL_01d7:  conv.i
            //IL_01d8:  ldc.i4.2
            //IL_01d9:  mul
            //IL_01da:  add
            //L_01db:  ldloc.s    V_10
            //IL_01dd:  stind.i2
            //IL_01de:  ldloc.s    V_10             
            //IL_01e0:  ldc.i4.s   48
            //IL_01e2:  bne.un.s   IL_01e8

            //IL_01e4:  ldarg.s    parseDecimal            
            //IL_01e6:  brfalse.s  IL_01ec

            //IL_01e8:  ldloc.s    V_12
            //IL_01ea:  stloc.s    V_13
            //IL_01ec:  ldloc.s    V_7         
            //IL_01ee:  ldc.i4.s   16
            //IL_01f0:  and
            //IL_01f1:  brtrue.s   IL_0201

            //IL_01f3:  ldarg.2
            //IL_01f4:  dup
            //IL_01f5:  ldfld      int32 System.Number/NumberBuffer::scale
            //IL_01fa:  ldc.i4.1
            //IL_01fb:  add
            //IL_01fc:  stfld      int32 System.Number/NumberBuffer::scale
            //IL_0201:  ldloc.s    V_7          
            //IL_0203:  ldc.i4.8
            //IL_0204:  or
            //IL_0205:  stloc.s    V_7
            //IL_0207:  br         IL_02b4

            //IL_020c:  ldloc.s    V_7          
            //IL_020e:  ldc.i4.s   16
            //IL_0210:  and
            //IL_0211:  brfalse    IL_02b4

            //IL_0216:  ldarg.2
            //IL_0217:  dup
            //IL_0218:  ldfld      int32 System.Number/NumberBuffer::scale
            //IL_021d:  ldc.i4.1
            //IL_021e:  sub
            //IL_021f:  stfld      int32 System.Number/NumberBuffer::scale
            //IL_0224:  br         IL_02b4

            //IL_0229:  ldarg.1                            
            //IL_022a:  ldc.i4.s   32
            //IL_022c:  and
            //IL_022d:  brfalse.s  IL_0270

            //IL_022f:  ldloc.s    V_7
            //IL_0231:  ldc.i4.s   16
            //IL_0233:  and
            //IL_0234:  brtrue.s   IL_0270

            //IL_0236:  ldloc.s    V_9
            //IL_0238:  ldloc.0
            //IL_0239:  call       char* System.Number::MatchChars(char*,
            //                                                     string)
            //IL_023e:  dup
            //IL_023f:  stloc.s    V_11
            //IL_0241:  ldc.i4.0
            //IL_0242:  conv.u
            //IL_0243:  bne.un.s   IL_0260

            //IL_0245:  ldloc.s    V_6                
            //IL_0247:  brfalse.s  IL_0270

            //IL_0249:  ldloc.s    V_7
            //IL_024b:  ldc.i4.s   32
            //IL_024d:  and
            //IL_024e:  brtrue.s   IL_0270

            //IL_0250:  ldloc.s    V_9
            //IL_0252:  ldloc.s    V_4
            //IL_0254:  call       char* System.Number::MatchChars(char*,
            //                                                     string)
            //IL_0259:  dup
            //IL_025a:  stloc.s    V_11
            //IL_025c:  ldc.i4.0
            //IL_025d:  conv.u
            //IL_025e:  beq.s      IL_0270

            //IL_0260:  ldloc.s    V_7
            //IL_0262:  ldc.i4.s   16
            //IL_0264:  or
            //IL_0265:  stloc.s    V_7
            //IL_0267:  ldloc.s    V_11
            //IL_0269:  ldc.i4.2
            //IL_026a:  conv.i
            //IL_026b:  sub
            //IL_026c:  stloc.s    V_9
            //IL_026e:  br.s       IL_02b4

            //IL_0270:  ldarg.1                      
            //IL_0271:  ldc.i4.s   64
            //IL_0273:  and
            //IL_0274:  brfalse.s  IL_02c4

            //IL_0276:  ldloc.s    V_7
            //IL_0278:  ldc.i4.4
            //IL_0279:  and
            //IL_027a:  brfalse.s  IL_02c4

            //IL_027c:  ldloc.s    V_7
            //IL_027e:  ldc.i4.s   16
            //IL_0280:  and
            //IL_0281:  brtrue.s   IL_02c4

            //IL_0283:  ldloc.s    V_9                     
            //IL_0285:  ldloc.1
            //IL_0286:  call       char* System.Number::MatchChars(char*,
            //                                                     string)
            //IL_028b:  dup
            //IL_028c:  stloc.s    V_11
            //IL_028:  ldc.i4.0
            //IL_028f:  conv.u
            //IL_0290:  bne.un.s   IL_02ad

            //IL_0292:  ldloc.s    V_6
            //IL_0294:  brfalse.s  IL_02c4

            //IL_0296:  ldloc.s    V_7                    
            //IL_0298:  ldc.i4.s   32
            //IL_029a:  and
            //IL_029b:  brtrue.s   IL_02c4

            //IL_029d:  ldloc.s    V_9
            //IL_029f:  ldloc.s    V_5
            //IL_02a1:  call       char* System.Number::MatchChars(char*,
            //                                                     string)
            //IL_02a6:  dup
            //IL_02a7:  stloc.s    V_11
            //IL_02a9:  ldc.i4.0
            //IL_02aa:  conv.u
            //IL_02ab:  beq.s      IL_02c4

            //IL_02ad:  ldloc.s    V_11               
            //IL_02af:  ldc.i4.2
            //IL_02b0:  conv.i
            //IL_02b1:  sub
            //IL_02b2:  stloc.s    V_9
            //IL_02b4:  ldloc.s    V_9            
            //IL_02b6:  ldc.i4.2
            //IL_02b7:  conv.i
            //IL_02b8:  add
            //IL_02b9:  dup
            //IL_02ba:  stloc.s    V_9
            //IL_02bc:  ldind.u2
            //IL_02bd:  stloc.s    V_10
            //IL_02bf:  br         IL_0182

            //IL_02c4:  ldc.i4.0                     
            //IL_02c5:  stloc.s    V_14
            //IL_02c7:  ldarg.2
            //IL_02c8:  ldloc.s    V_13
            //IL_02ca:  stfld      int32 System.Number/NumberBuffer::precision
            //IL_02cf:  ldarg.2
            //IL_02d0:  ldfld      char* System.Number/NumberBuffer::digits
            //IL_02d5:  ldloc.s    V_13
            //IL_02d7:  conv.i
            //IL_02d8:  ldc.i4.2
            //IL_02d9:  mul
            //IL_02da:  add
            //IL_02db:  ldc.i4.0
            //IL_02dc:  stind.i2
            //IL_02dd:  ldloc.s    V_7
            //IL_02df:  ldc.i4.4
            //IL_02e0:  and
            //IL_02e1:  brfalse    IL_04c1

            //IL_02e6:  ldloc.s    V_10
            //IL_02e8:  ldc.i4.s   69
            //IL_02ea:  beq.s      IL_02f5

            //IL_02ec:  ldloc.s    V_10
            //IL_02ee:  ldc.i4.s   101
            //IL_02f0:  bne.un     IL_03cc

            //IL_02f5:  ldarg.1                    
            //IL_02f6:  ldc.i4     0x80
            //IL_02fb:  and
            //IL_02fc:  brfalse    IL_03cc

            //IL_0301:  ldloc.s    V_9
            //IL_0303:  stloc.s    V_15
            //IL_0305:  ldloc.s    V_9
            //IL_0307:  ldc.i4.2
            //IL_0308:  conv.i
            //IL_0309:  add
            //IL_030a:  dup
            //IL_030b:  stloc.s    V_9
            //IL_030d:  ldind.u2
            //IL_030e:  stloc.s    V_10
            //IL_0310:  ldloc.s    V_9
            //IL_0312:  ldarg.3
            //IL_0313:  ldfld      string System.Globalization.NumberFormatInfo::positiveSign
            //IL_0318:  call       char* System.Number::MatchChars(char*,
            //                                                     string)
            //IL_031d:  dup
            //IL_031e:  stloc.s    V_11
            //IL_0320:  ldc.i4.0
            //IL_0321:  conv.u
            //IL_0322:  beq.s      IL_032e

            //IL_0324:  ldloc.s    V_11
            //IL_0326:  dup
            //IL_0327:  stloc.s    V_9
            //IL_0329:  ldind.u2
            //IL_032a:  stloc.s    V_10
            //IL_032c:  br.s       IL_034d

            //IL_032e:  ldloc.s    V_9              
            //IL_0330:  ldarg.3
            //IL_0331:  ldfld      string System.Globalization.NumberFormatInfo::negativeSign
            //IL_0336:  call       char* System.Number::MatchChars(char*,
            //                                                     string)
            //IL_033b:  dup
            //IL_033c:  stloc.s    V_11
            //IL_033e:  ldc.i4.0
            //IL_033f:  conv.u
            //IL_0340:  beq.s      IL_034d

            //IL_0342:  ldloc.    V_11
            //IL_0344:  dup
            //IL_0345:  stloc.s    V_9
            //IL_0347:  ldind.u2
            //IL_0348:  stloc.s    V_10
            //IL_034a:  ldc.i4.1
            //IL_034b:  stloc.s    V_14
            //IL_034d:  ldloc.s    V_10                      
            //IL_034f:  ldc.i4.s   48
            //IL_0351:  blt.s      IL_03c3

            //IL_0353:  ldloc.s    V_10
            //IL_0355:  ldc.i4.s   57
            //IL_0357:  bgt.s      IL_03c3

            //IL_0359:  ldc.i4.0
            //IL_035a:  stloc.s    V_16
            //IL_035c:  ldloc.s    V_16                 
            //IL_035e:  ldc.i4.s   10
            //IL_0360:  mul
            //IL_0361:  ldloc.s    V_10
            //IL_0363:  ldc.i4.s   48
            //IL_0365:  sub
            //IL_0366:  add
            //IL_0367:  stloc.s    V_16
            //IL_0369:  ldloc.s    V_9
            //IL_036b:  ldc.i4.2
            //IL_036c:  conv.i
            //IL_036d:  add
            //IL_036e:  dup
            //IL_036f:  stloc.s    V_9
            //IL_0371:  ldind.u2
            //IL_0372:  stloc.s    V_10
            //IL_0374:  ldloc.s    V_16
            //IL_0376:  ldc.i4     0x3e8
            //IL_037b:  ble.s      IL_039d

            //IL_037d:  ldc.i4     0x270f            
            //IL_0382:  stloc.s    V_16
            //IL_0384:  br.s       IL_0391

            //IL_0386:  ldloc.s    V_9                
            //IL_0388:  ldc.i4.2
            //IL_0389:  conv.i
            //IL_038a:  add
            //IL_038b:  dup
            //IL_038c:  stloc.s    V_9
            //IL_038e:  ldind.u2
            //IL_038f:  stloc.s    V_10
            //IL_0391:  ldloc.s    V_10             
            //IL_0393:  ldc.i4.s   48
            //IL_0395:  blt.s      IL_039d

            //IL_0397:  ldloc.s    V_10
            //IL_0399:  ldc.i4.s   57
            //IL_039b:  ble.s      IL_0386

            //IL_039d:  ldloc.s    V_10              
            //IL_039f:  ldc.i4.s   48
            //IL_03a1:  blt.s      IL_03a9

            //IL_03a3:  ldloc.s    V_10
            //IL_03a5:  ldc.i4.s   57
            //IL_03a7:  ble.s      IL_035c

            //IL_03a9:  ldloc.s    V_14              
            //IL_03ab:  brfalse.s  IL_03b2

            //IL_03ad:  ldloc.s    V_16
            //IL_03af:  neg
            //IL_03b0:  stloc.s    V_16
            //IL_03b2:  ldarg.2
            //IL_03b3:  dup
            //IL_03b4:  ldfld      int32 System.Number/NumberBuffer::scale
            //IL_03b9:  ldloc.s    V_16
            //IL_03bb:  add
            //IL_03bc:  stfld      int32 System.Number/NumberBuffer::scale
            //IL_03c1:  br.s       IL_03cc

            //IL_03c3:  ldloc.s    V_15                          
            //IL_03c5:  stloc.s    V_9
            //IL_03c7:  ldloc.s    V_9
            //IL_03c9:  ldind.u2
            //IL_03ca:  stloc.s    V_10
            //IL_03cc:  ldloc.s    V_10
            //IL_03ce:  call       bool System.Number::IsWhite(char)
            //IL_03d3:  brfalse.s  IL_03dd

            //IL_03d5:  ldarg.1
            //IL_03d6:  ldc.i4.2
            //IL_03d7:  and
            //IL_03d8:  brtrue     IL_0486

            //IL_03dd:  ldarg.1                    
            //IL_03de:  ldc.i4.8
            //IL_03df:  and
            //IL_03e0:  brfalse.s  IL_03eb

            //IL_03e2:  ldloc.s    V_7
            //IL_03e4:  ldc.i4.1
            //IL_03e5:  and
            //IL_03e6:  ldc.i4.0
            //IL_03e7:  ceq
            //IL_03e9:  br.s       IL_03ec

            //IL_03eb:  ldc.i4.0
            //IL_03ec:  dup
            //IL_03ed:  stloc.s    V_8
            //IL_03ef:  brfalse.s  IL_0414

            //IL_03f1:  ldloc.s    V_9                       
            //IL_03f3:  ldarg.3
            //IL_03f4:  ldfld      string System.Globalization.NumberFormatInfo::positiveSign
            //IL_03f9:  call       char* System.Number::MtchChars(char*,
            //                                                     string)
            //IL_03fe:  dup
            //IL_03ff:  stloc.s    V_11
            //IL_0401:  ldc.i4.0
            //IL_0402:  conv.u
            //IL_0403:  beq.s      IL_0414

            //IL_0405:  ldloc.s    V_7
            //IL_0407:  ldc.i4.1
            //IL_0408:  or
            //IL_0409:  stloc.s    V_7
            //IL_040b:  ldloc.s    V_11
            //IL_040d:  ldc.i4.2
            //IL_040e:  conv.i
            //IL_040f:  sub
            //IL_0410:  stloc.s    V_9
            //IL_0412:  br.s       IL_0486

            //IL_0414:  ldloc.s    V_8                 
            //IL_0416:  brfalse.s  IL_0442

            //IL_0418:  ldloc.s    V_9
            //IL_041a:  ldarg.3
            //IL_041b:  ldfld      string System.Globalization.NumberFormatInfo::negativeSign
            //IL_0420:  call       char* System.Number::MatchChars(char*,
            //                                                     string)
            //IL_0425:  dup
            //IL_0426:  stloc.s    V_11
            //IL_0428:  ldc.i4.0
            //IL_0429:  conv.u
            //IL_042a:  beq.s      IL_0442

            //IL_042c:  ldloc.s    V_7                 
            //IL_042e:  ldc.i4.1
            //IL_042f:  or
            //IL_0430:  stloc.s    V_7
            //IL_0432:  ldarg.2
            //IL_0433:  ldc.i4.1
            //IL_0434:  stfld      bool System.Number/NumberBuffer::sign
            //IL_0439:  ldloc.s    V_11
            //IL_043b:  ldc.i4.2
            //IL_043c:  conv.i
            //IL_043d:  sub
            //IL_043e:  stloc.s    V_9
            //IL_0440:  br.s       IL_0486

            //IL_0442:  ldloc.s    V_10                    
            //IL_0444:  ldc.i4.s   41
            //IL_0446:  bne.un.s   IL_0457

            //IL_0448:  ldloc.s    V_7
            //IL_044a:  ldc.i4.2
            //IL_044b:  and
            //IL_044c:  brfalse.s  IL_0457

            //IL_044e:  ldloc.s    V_7
            //IL_0450:  ldc.i4.s   -3
            //IL_0452:  and
            //IL_0453:  stloc.s    V_7
            //IL_0455:  br.s       IL_0486

            //IL_0457:  ldloc.2                   
            //IL_0458:  brfalse.s  IL_0469

            //IL_045a:  ldloc.s    V_9
            //IL_045c:  ldloc.2
            //IL_045d:  call       char* System.Number::MatchChars(char*,
            //                                                     string)
            //IL_0462:  dup
            //IL_0463:  stloc.s    V_11
            //IL_0465:  ldc.i4.0
            //IL_0466:  conv.u
            //IL_0467:  bne.un.s   IL_047b

            //IL_0469:  ldloc.3                         
            //IL_046a:  brfalse.s  IL_0496

            //IL_046c:  ldloc.s    V_9
            //IL_046e:  ldloc.3
            //IL_046f:  call       char* System.Number::MatchChars(char*,
            //                                                     string)
            //IL_0474:  dup
            //IL_0475:  stloc.s    V_11
            //IL_0477:  ldc.i4.0
            //IL_0478:  conv.u
            //IL_0479:  beq.s      IL_0496

            //IL_047b:  ldnull                    
            //IL_047c:  stloc.2
            //IL_047d:  ldnull
            //IL_047e:  stloc.3
            //IL_047f:  ldloc.s    V_11
            //IL_0481:  ldc.i4.2
            //IL_0482:  conv.i
            //IL_0483:  sub
            //IL_0484:  stloc.s    V_9
            //IL_0486:  ldloc.s    V_9                        
            //IL_0488:  ldc.i4.2
            //IL_0489:  conv.i
            //IL_048a:  add
            //IL_048b:  dup
            //IL_048c:  stloc.s    V_9
            //IL_048e:  ldind.u2
            //IL_048f:  stloc.s    V_10
            //IL_0491:  br         IL_03cc

            //IL_0496:  ldloc.s    V_7             
            //IL_0498:  ldc.i4.2
            //IL_0499:  and
            //IL_049a:  brtrue.s  IL_04c1

            //IL_049c:  ldloc.s    V_7
            //IL_049e:  ldc.i4.8
            //IL_049f:  and
            //IL_04a0:  brtrue.s   IL_04bb

            //IL_04a2:  ldarg.s    parseDecimal
            //IL_04a4:  brtrue.s   IL_04ad

            //IL_04a6:  ldarg.2
            //IL_04a7:  ldc.i4.0
            //IL_04a8:  stfld      int32 System.Number/NumberBuffer::scale
            //IL_04ad:  ldloc.s    V_7
            //IL_04af:  ldc.i4.s   16
            //IL_04b1:  and
            //IL_04b2:  brtrue.s   IL_04bb

            //IL_04b4:  ldarg.2             
            //IL_04b5:  ldc.i4.0
            //IL_04b6:  stfld      bool System.Number/NumberBuffer::sign
            //IL_04bb:  ldarg.0                     
            //IL_04bc:  ldloc.s    V_9
            //IL_04be:  stind.i
            //IL_04bf:  ldc.i4.1
            //IL_04c0:  ret

            //IL_04c1:  ldarg.0        
            //IL_04c2:  ldloc.s    V_9
            //IL_04c4:  stind.i
            //IL_04c5:  ldc.i4.0
            //IL_04c6:  ret
            #endregion
            string V_0, V_1, V_2, V_3, V_4, V_5; 
            bool V_6; 
            int V_7; 
            bool V_8; 
            char* V_9; 
            char V_10; 
            char* V_11; 
            int V_12, V13; 
            bool V14;
            char* V_15; 
            int V_16;
            number.scale=0;
            number.sign=0;
            V_2=null;
            V_3=null;
            V_4=null;
            V_5=null;
            V_6=false;
            if ((options & NumberStyles.AllowCurrencySymbol) == 0)//跳往IL_005d
            {
                V_0 = numfmt.NumberDecimalSeparator;
                V_1 = numfmt.NumberGroupSeparator;
                //IL_006b                
            }
            else
            {
                //IL_0024
                V_2=numfmt.CurrencySymbol;
                if (numfmt.ansiCurrencySymbol != null)//条件不满足跳往//IL_003a
                {
                    //IL_0033
                    V_3 = numfmt.ansiCurrencySymbol;                    
                }
                //IL_003a                
                V_4 = numfmt.NumberDecimalSeparator; 
                V_5 = numfmt.NumberGroupSeparator; 
                V_0 = numfmt.CurrencyDecimalSeparator; 
                V_1 = numfmt.CurrencyGroupSeparator; 
                V_6 = true;
                //无条件跳往IL_006b
            }
            //IL_006b
            V_7 = 0;
            V_8 = false;
            V_9 = str;
            V_10=*V_9;
            #region 循环1
            while (1 == 1)
            {
                if (Number.IsWhite(V_10))//IL_007a,不满足的话跳往IL_00ad
                {
                    if ((options & NumberStyles.AllowLeadingWhite) != 0)//IL_0086,不满足跳往IL_00ad
                    {
                        //IL_0088
                        if ((V_7 & 1) == 0)//跳往IL_016c
                        {

                        }
                        else
                        {
                            //IL_0091 
                            if ((V_7 & 1) != 0)//不满足跳往IL_00ad
                            {
                                //IL_0097
                                if ((V_7 & 32) == 0)
                                {
                                    //IL_00a1
                                    if (numfmt.numberNegativePattern == 2)//跳往IL_016c,不满足跳往IL_00ad
                                    {
                                        //IL_016c
                                    }
                                }
                                else
                                {
                                    //IL_016c
                                }
                            }
                        }
                    }
                }
                //IL_00ad           
                V_8 = (options & NumberStyles.AllowLeadingSign) != 0 ? (V_7 & 1) == 0 : false;
                if (V_8)//不满足跳往IL_00e7
                {
                    //IL_00c1
                    V_11 = Number.MatchChars(V_9, numfmt.positiveSign);
                    if (V_11 != null)//不满足跳往IL_00e7
                    {
                        //IL_00d5 
                        V_7 = V_7 | 1;
                        V_9 = V_11 - 2;
                        //直接跳往IL_016c
                    }
                }
                //IL_00e7
                if (V_8)
                {
                    //IL_00eb
                    V_11 = Number.MatchChars(V_9, numfmt.negativeSign);
                    if (V_11 != null)
                    {
                        //IL_00ff
                        V_7 = V_7 | 1;
                        number.sign = 1;
                        V_9 = V_11 - 2;
                        //无条件跳往IL_016c
                    }
                }
                //IL_0115
                if (V_10 == 40)//不满足跳往IL_0136
                {

                    //IL_011b
                    if ((options & 16) != 0)//条件不满足跳往IL_0136
                    {
                        //IL_0121
                        if ((V_7 & 1) == 0)//条件不满足跳往IL_0136
                        {
                            //IL_0127
                            V_7 = V_7 | 3;
                            num.sign = 1;
                            //直接跳往IL_016c
                        }

                    }
                }
                //IL_0136
                if (V_2 != null)//不满足跳往IL_0148
                {
                    //IL_0139
                    V_11 = Number.MatchChars(V_9, V_2);
                    if (V_11 != null)//跳往IL_015a,不满足跳往IL_0148
                    {
                        //IL_015a
                        V_7 = V_7 | 32;
                        V_2 = null;
                        V_3 = null;
                        V_9 = V_11 - 2;
                    }
                }
                //IL_0148
                if (V_3 != null)//不满足跳往IL_017c
                {
                    //IL_014b
                    V_11 = Number.MatchChars(V_9, V_3);
                    if (V_11 != null)//不满足跳往IL_017c
                    {
                        //IL_015a
                        V_7 = V_7 | 32; 
                        V_2 = null; 
                        V_3 = null; 
                        V_9 = V_11 - 2;
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
                //IL_016c
                V_9 = V_9 + 2;
                V_10 = *V_9;//直接跳往IL_007a
            }
            #endregion
            //IL_017c
            V_12=0;
            V_13=0;
            #region 循环2
            while (1 == 1)
            {
                //IL_0182
                if ((V_10 >= 48 && V_10 <= 57) || ((options & NumberStyles.AllowHexSpecifier) != 0 && ((V_10 >= 97 && V_10 <= 102) || (V_10 >= 65 && V_10 <= 70))))
                {
                    //IL_01b2
                    V_7 = V_7 | 4;
                    if (V_10 == 48)
                    {
                        if (V_7 & 8 == 0)
                        {

                            //IL_020c
                            if (V_7 & 16 != 0)
                            {
                                number.scale -= 1;
                                //直接跳往IL_02b4
                            }
                            //IL_02b4
                            V_9 = V_9 + 2;
                            V_10 = *V_9;
                            //直接跳往IL_0182
                            continue;

                        }

                    }
                    //IL_01c4                
                    if (V_12 < 50)
                    {
                        *(number.digits + V_12 * 2) = V_10;
                        V_12 = V_12 + 1;
                        //IL_01de
                        if (V_10 == 48)
                        {
                            //IL_01e4
                            if (parseDecimal)
                            {
                                //IL_01e8
                                V_13 = V_12;
                            }
                        }
                        else
                        {
                            //IL_01e8
                            V_13 = V_12;
                        }
                    }
                    //IL_01ec
                    if ((V_7 & 16) == 0)
                    {
                        number.scale += 1;
                        //IL_0201
                    }
                    //IL_0201
                    V_7 = V_7 | 8;
                    //无条件跳往IL_02b4
                    V_9 = V_9 + 2;
                    V_10 = *V_9;
                    //直接跳往IL_0182
                    continue;
                }
                else
                {
                    //IL_0229
                    if (options & 32 != 0)
                    {
                        if (V_7 & 16 == 0)
                        {
                            V_11 = System.Number.MatchChars(V_9, V_0);
                            if (V_11 == null)
                            {
                                //IL_0245
                                if (V_6)
                                {
                                    if (V_7 & 32 == 0)
                                    {
                                        V_11 = System.Number.MatchChars(V_9, V_4);
                                        if (V_11 != null)
                                        {
                                            //IL_0260
                                            V_7 = V_7 | 16;
                                            V_9 = V_11 - 2;
                                            //直接跳往IL_02b4
                                            V_9 = V_9 + 2;
                                            V_10 = *V_9;
                                            //直接跳往IL_0182
                                            continue;
                                        }

                                    }

                                }
                                
                                
                            }
                            else
                            {
                                //IL_0260
                                V_7 = V_7 | 16;
                                V_9 = V_11 - 2;
                                //直接跳往IL_02b4
                                V_9 = V_9 + 2;
                                V_10 = *V_9;
                                //直接跳往IL_0182
                                continue;
                            }
                        }
                        
                    }
                    
                    //IL_0270
                    if (options & 64 == 0)
                    {
                        break;//IL_02c4
                    }
                    else
                    {
                        if (V_7 & 4 == 0)
                        {
                            break;//IL_02c4                            
                        }
                        else
                        {
                            if (V_7 & 16 == 0)
                            {
                                //IL_0283
                                V_11=System.Number.MatchChars(V_9,V_1);
                                if(V_11==null)
                                {
                                    if(V_6)
                                    {
                                        //IL_0296
                                        if(V_7&32==0)
                                        {
                                            V_11=System.Number.MatchChars(V_9,V_5);
                                            if(V_11==null)
                                            {
                                                break;//IL_02c4
                                            }                                            
                                        }
                                        else
                                        {
                                            break;//IL_02c4
                                        }
                                    }
                                    else
                                    {
                                        break;//IL_02c4
                                    }
                                }                                
                                //IL_02ad
                                V_9 = V_11 - 2;
                                //IL_02b4
                                V_9 = V_9 + 2;
                                V_10 = *V_9;
                                //直接跳往IL_0182
                                continue;
                            }
                            else
                            {
                                break;//IL_02c4
                            }
                        }
                    }

                }
            }
            #endregion
            //IL_02c4
            V_14=false;
            number.precision=V_13;
            *(number.digits+V_13*2)=0;
            if(V_7&4==0)
            {
                //IL_04c1
                str = V_9; 
                return false;
            }
            else
            {
                if (V_10 == 69 || V_10 == 101)
                {
                    //IL_02f5                    
                    if (options & 0x80 != 0)//不满足跳往IL_03cc
                    {
                        V_15 = V_9;
                        V_9 = V_9 + 2;
                        V_10 = *V_9;
                        V_11 = System.Number.MatchChars(V_9, numfmt.positiveSign);
                        if (V_11 == null)
                        {
                            //IL_032e
                            V_11 = System.Number.MatchChars(V_9, numfmt.negativeSign);
                            if (V_11 == null)
                            {
                                //IL_034d
                            }
                            else
                            {
                                V_9 = V_11;
                                V_10 = *V_9;
                                V_14 = true;
                                //IL_034d
                            }
                        }
                        else
                        {
                            V_9 = V_11;
                            V_10 = *V_9;
                            //直接跳往IL_034d
                        }
                        //IL_034d
                        if (V_10 < 48)
                        {
                            //IL_03c3
                            V_9 = V_15;
                            V_10 = *V_9;
                            //IL_03cc

                        }
                        else
                        {
                            if (V_10 > 57)
                            {
                                //IL_03c3
                                V_9 = V_15;
                                V_10 = *V_9;
                                //IL_03cc 

                            }
                            else
                            {
                                V_16 = 0;
                                do
                                {
                                    //IL_035c
                                    V_16 = V_16 * 10 + (V_10 - 48);
                                    V_9 += 2;
                                    V_10 = *V_9;
                                    if (V_16 > 0x3e8)
                                    {
                                        //IL_037d
                                        V_16 = 0x270f;
                                        //IL_0391
                                        while (V_10 >= 48 && V_10 <= 57)
                                        {
                                            //IL_0386
                                            V_9 += 2;
                                            V_10 = *V_9;
                                            //IL_0391
                                        }
                                    }
                                } while (V_10 >= 48 && V_10 <= 57);//IL_039d,满足条件跳往//IL_035c


                                //IL_03a9      
                                if (V_14)
                                {
                                    V_16 = ~V_16;
                                }
                                //IL_03b2 
                                number.scale += V_16;
                                //直接跳往IL_03cc

                            }
                        }
                    }
                    else
                    {
                        //IL_03cc
                    }
                }
                #region 循环3
                while (1 == 1)
                {
                    //IL_03cc 
                    if (System.Number.IsWhite(V_10))
                    {
                        if (options & 2 != 0)
                        {
                            //IL_0486
                            V_9 += 2;
                            V_10 = *V_9;
                            //直接跳往IL_03cc
                            continue;
                        }
                    }

                    //IL_03dd                
                    V_8 = options & 8 ? V_7 & 1 == 0 : false;
                    if (V_8)
                    {
                        //IL_03f1
                        V_11 = System.Number.MatchChars(V_9, numfmt.positiveSign);
                        if (V_11 != null)
                        {
                            V_7 = V_7 | 1;
                            V_9 = V_11 - 2;
                            //无条件跳往IL_0486
                            V_9 += 2;
                            V_10 = *V_9;
                            //直接跳往IL_03cc
                            continue;

                        }
                    }
                    //IL_0414
                    if (V_8)
                    {
                        V_11 = System.Number.MatchChars(V_9, numfmt.negativeSign);
                        if (V_11 != null)
                        {
                            //IL_042c
                            V_7 = V_7 | 1;
                            number.sign = true;
                            V_9 = V_11 - 2;
                            //直接跳往IL_0486
                            V_9 += 2;
                            V_10 = *V_9;
                            //直接跳往IL_03cc
                            continue;
                        }

                    }
                    //IL_0442
                    if (V_10 == 41)
                    {
                        if (V_7 & 2 != 0)
                        {
                            V_7 = V_7 & -3;
                            //无条件跳完IL_0486
                            V_9 += 2;
                            V_10 = *V_9;
                            //直接跳往IL_03cc
                            continue;
                        }
                    }
                    //IL_0457
                    if (V_2 != null)
                    {
                        V_11 = System.Number.MatchChars(V_9, V_2);
                        if (V_11 == null)//不满足跳往IL_047b
                        {
                            //IL_0469
                            if (V_3 == null)
                            {
                                break;
                                //IL_0496
                            }
                            else
                            {
                                V_11 = System.Number.MatchChars(V_9, V_3);
                                if (V_11 == null)//不满足跳往IL_047b
                                {
                                    break;
                                    //IL_0496
                                }
                            }
                        }

                    }
                    else
                    {
                        //IL_0469
                        if (V_3 == null)
                        {
                            break;
                            //IL_0496
                        }
                        else
                        {
                            V_11 = System.Number.MatchChars(V_9, V_3);
                            if (V_11 == null)//不满足跳往IL_047b
                            {
                                break;
                                //IL_0496
                            }
                        }
                    }
                    //IL_047b
                    V_2 = null;
                    V_3 = null;
                    V_9 = V_11 - 2;
                    V_9 = V_9 + 2;
                    V_10 = *V_9;
                    //直接跳往IL_03cc
                }
                #endregion
                //IL_0496
                if(V_7&2!=0)
                {
                    //IL_04c1
                    str = V_9;
                    return false;
                }
                else
                {
                    if (V_7 & 8 == 0)//不满足跳往IL_04bb
                    {

                        if (!parseDecimal)//不满足跳往IL_04ad
                        {
                            number.scale = 0;
                            //IL_04ad                            
                        }
                        //IL_04ad
                        if (V_7 & 16 == 0)//不满足跳往IL_04bb
                        {
                            //IL_04b4
                            number.sign = 0;
                            //IL_04bb
                        }
                        
                    }                    
                    //IL_04bb
                    str = V_9; 
                    return true;
                    
                }
            }

        }
        internal static float ParseSingle(string @value, NumberStyles options, NumberFormatInfo numfmt)
        {
            //.maxstack  5
            //.locals init (uint8* V_0,                           
            //         valuetype System.Number/NumberBuffer V_1,
            //         float64 V_2,
            //         float32 V_3)
            //IL_0000:  ldc.i4.1
            //IL_0001:  ldc.i4.s   114
            //IL_0003:  mul
            //IL_0004:  localloc
            //IL_0006:  stloc.0
            //IL_0007:  ldloca.s   V_1
            //IL_0009:  ldloc.0
            //IL_000a:  newobj     instance void System.Number/NumberBuffer::.ctor(uint8*)
            //IL_000f:  stobj      System.Number/NumberBuffer
            //IL_0014:  ldc.r8     0.0
            //IL_001d:  stloc.2
            //IL_001e:  ldarg.0
            //IL_001f:  ldarg.1
            //IL_0020:  ldloca.s   V_1
            //IL_0022:  ldarg.2
            //IL_0023:  ldc.i4.0
            //IL_0024:  call       void System.Number::StringToNumber(string,
            //                                                        valuetype System.Globalization.NumberStyles,
            //                                                        valuetype System.Number/NumberBuffer&,
            //                                                        class System.Globalization.NumberFormatInfo,
            //                                                        bool)
            //IL_0029:  ldloca.s   V_1
            //IL_002b:  call       instance uint8* System.Number/NumberBuffer::PackForNative()
            //IL_0030:  ldloca.s   V_2
            //IL_0032:  call       bool System.Number::NumberBufferToDouble(uint8*,
            //                                                              float64&)
            //IL_0037:  brtrue.s   IL_0049

            //IL_0039:  ldstr      "Overflow_Single"
            //IL_003e:  call       string System.Environment::GetResourceString(string)
            //IL_0043:  newobj     instance void System.OverflowException::.ctor(string)
            //IL_0048:  throw

            //IL_0049:  ldloc.2
            //IL_004a:  conv.r4
            //IL_004b:  stloc.3
            //IL_004c:  ldloc.3
            //IL_004d:  call       bool System.Single::IsInfinity(float32)
            //IL_0052:  brfalse.s  IL_0064

            //IL_0054:  ldstr      "Overflow_Single"
            //IL_0059:  call       string System.Environment::GetResourceString(string)
            //IL_005e:  newobj     instance void System.OverflowException::.ctor(string)
            //IL_0063:  throw

            //IL_0064:  ldloc.3
            //IL_0065:  ret
            byte* V_0 = stackalloc byte[1 * 114]; 
            System.Number.NumberBuffer V_1; 
            double V_2; 
            float V_3; 
            V_1 = new System.Number.NumberBuffer(V_0); 
            V_2 = 0.0d; 
            System.Number.StringToNumber(@value, options, ref V_1, numfmt, false);
            if (System.Number.NumberBufferToDouble(V_1.PackForNative(), ref V_2))
            {
                V_3 = (float)V_2;
                if (System.Single.IsInfinity(V_3))
                {
                    throw new System.OverflowException(System.Environment.GetResourceString("Overflow_Single"));
                }
                else
                {
                    return V_3;
                }
            }
            else
            {
                throw new System.OverflowException(System.Environment.GetResourceString("Overflow_Single"));
            }

        }
        internal static uint ParseUInt32(string @value, NumberStyles options, NumberFormatInfo numfmt)
        {
            //.maxstack  5
            //.locals init (uint8* V_0,
            //         valuetype System.Number/NumberBuffer V_1,
            //         uint32 V_2)
            //IL_0000:  ldc.i4.1
            //IL_0001:  ldc.i4.s   114
            //IL_0003:  mul
            //IL_0004:  localloc
            //IL_0006:  stloc.0
            //IL_0007:  ldloca.s   V_1
            //IL_0009:  ldloc.0
            //IL_000a:  newobj     instance void System.Number/NumberBuffer::.ctor(uint8*)
            //IL_000f:  stobj      System.Number/NumberBuffer
            //IL_0014:  ldc.i4.0
            //IL_0015:  stloc.2
            //IL_0016:  ldarg.0
            //IL_0017:  ldarg.1
            //IL_0018:  ldloca.s   V_1
            //IL_001a:  ldarg.2
            //IL_001b:  ldc.i4.0
            //IL_001c:  call       void System.Number::StringToNumber(string,
            //                                                        valuetype System.Globalization.NumberStyles,
            //                                                        valuetype System.Number/NumberBuffer&,
            //                                                        class System.Globalization.NumberFormatInfo,
            //                                                        bool)
            //IL_0021:  ldarg.1
            //IL_0022:  ldc.i4     0x200
            //IL_0027:  and
            //IL_0028:  brfalse.s  IL_0045

            //IL_002a:  ldloca.s   V_1
            //IL_002c:  ldloca.s   V_2
            //IL_002e:  call       bool System.Number::HexNumberToUInt32(valuetype System.Number/NumberBuffer&,
          //                                                           uint32&)
            //IL_0033:  brtrue.s   IL_0060

            //IL_0035:  ldstr      "Overflow_UInt32"
            //IL_003a:  call       string System.Environment::GetResourceString(string)
            //IL_003f:  newobj     instance void System.OverflowException::.ctor(string)
            //IL_0044:  throw

            //IL_0045:  ldloca.s   V_1
            //IL_0047:  ldloca.s   V_2
            //IL_0049:  call       bool System.Number::NumberToUInt32(valuetype System.Number/NumberBuffer&,
            //                                                        uint32&)
            //IL_004e:  brtrue.s   IL_0060

            //IL_0050:  ldstr      "Overflow_UInt32"
            //IL_0055:  call       string System.Environment::GetResourceString(string)
            //IL_005a:  newobj     instance void System.OverflowException::.ctor(string)
            //IL_005f:  throw

            //IL_0060:  ldloc.2
            //IL_0061:  ret
            byte* V_0 = stackalloc byte[1 * 114];
            System.Number.NumberBuffer V_1;
            uint V_2;
            V_1 = new System.Number.NumberBuffer(V_0);
            V_2 = 0;
            System.Number.StringToNumber(s, style, ref V_1, info, false);
            if (style & NumberStyles.AllowHexSpecifier != 0)
            {
                if (System.Number.HexNumberToUInt32(ref V_1, ref V_2))
                {
                    return V_2;
                }
                else
                {
                    throw new System.OverflowException(System.Environment.GetResourceString("Overflow_UInt32"));
                }
            }
            else
            {
                //IL_0045
                if (System.Number.NumberToUInt32(ref V_1, ref V_2))
                {
                    return V_2;
                }
                throw new System.OverflowException(System.Environment.GetResourceString("Overflow_UInt32"));
            }


        }
        internal static ulong ParseUInt64(string @value, NumberStyles options, NumberFormatInfo numfmt)
        {
            //.maxstack  5
            //.locals init (uint8* V_0,
            //         valuetype System.Number/NumberBuffer V_1,
            //         uint64 V_2)
            //IL_0000:  ldc.i4.1
            //IL_0001:  ldc.i4.s   114
            //IL_0003:  mul
            //IL_0004:  localloc
            //IL_0006:  stloc.0
            //IL_0007:  ldloca.s   V_1
            //IL_0009:  ldloc.0
            //IL_000a:  newobj     instance void System.Number/NumberBuffer::.ctor(uint8*)
            //IL_000f:  stobj      System.Number/NumberBuffer
            //IL_0014:  ldc.i4.0
            //IL_0015:  conv.i8
            //IL_0016:  stloc.2
            //IL_0017:  ldarg.0
            //IL_0018:  ldarg.1
            //IL_0019:  ldloca.s   V_1
            //IL_001b:  ldarg.2
            //IL_001c:  ldc.i4.0
            //IL_001d:  call       void System.Number::StringToNumber(string,
            //                                                        valuetype System.Globalization.NumberStyles,
            //                                                        valuetype System.Number/NumberBuffer&,
            //                                                        class System.Globalization.NumberFormatInfo,
            //                                                        bool)
            //IL_0022:  ldarg.1
            //IL_0023:  ldc.i4     0x200
            //IL_0028:  and
            //IL_0029:  brfalse.s  IL_0046

            //IL_002b:  ldloca.s   V_1
            //IL_002d:  ldloca.s   V_2
            //IL_002f:  call       bool System.Number::HexNumberToUInt64(valuetype System.Number/NumberBuffer&,
            //                                                           uint64&)
            //IL_0034:  brtrue.s   IL_0061

            //IL_0036:  ldstr      "Overflow_UInt64"
            //IL_003b:  call       string System.Enviroment::GetResourceString(string)
            //IL_0040:  newobj     instance void System.OverflowException::.ctor(string)
            //IL_0045:  throw

            //IL_0046:  ldloca.s   V_1
            //IL_0048:  ldloca.s   V_2
            //IL_004a:  call       bool System.Number::NumberToUInt64(valuetype System.Number/NumberBuffer&,
            //                                                        uint64&)
            //IL_004f:  brtrue.s   IL_0061

            //IL_0051:  ldstr      "Overflow_UInt64"
            //IL_0056:  call       string System.Environment::GetResourceString(string)
            //IL_005b:  newobj     instance void System.OverflowException::.ctor(string)
            //IL_0060:  throw

            //IL_0061:  ldloc.2
            //IL_0062:  ret
            byte* V_0 = stackalloc byte[1 * 114];
            System.Number.NumberBuffer V_1;
            ulong V_2;
            V_1 = new System.Number.NumberBuffer(V_0);
            V_2 = 0L;
            System.Number.StringToNumber(@value, options, ref V_1, numfmt, false);
            if (options & NumberStyles.AllowHexSpecifier != 0)
            {
                if (System.Number.HexNumberToUInt64(ref V_1, ref V_2))
                {
                    return V_2;
                }
                else
                {
                    throw new System.OverflowException(System.Environment.GetResourceString("Overflow_UInt64"));
                }
            }
            else
            {
                if (System.Number.NumberToUInt64(ref V_1, ref V_2))
                {
                    return V_2;
                }
                else
                {
                    throw new System.OverflowException(System.Environment.GetResourceString("Overflow_UInt64"));
                }
            }
        }
        private static void StringToNumber(string str, NumberStyles options, ref NumberBuffer number, NumberFormatInfo info, bool parseDecimal)
        {
            //.maxstack  5
            //.locals init (char* V_0,                     
            //         char* V_1,
            //         string pinned V_2)
            //IL_0000:  ldarg.0
            //IL_0001:  brtrue.s   IL_000e

            //IL_0003:  ldstr      "String"
            //IL_0008:  newobj     instance void System.ArgumentNullException::.ctor(string)
            //IL_000d:  throw

            //IL_000e:  ldarg.0               
            //IL_000f:  stloc.2
            //IL_0010:  ldloc.2                  
            //IL_0011:  conv.i
            //IL_0012:  dup
            //IL_0013:  brfalse.s  IL_001b

            //IL_0015:  call       int32 System.Runtime.CompilerServices.RuntimeHelpers::get_OffsetToStringData()
            //IL_001a:  add
            //IL_001b:  stloc.0
            //IL_001c:  ldloc.0                
            //IL_001d:  stloc.1
            //IL_001e:  ldloca.s   V_1
            //IL_0020:  ldarg.1
            //IL_0021:  ldarg.2
            //IL_0022:  ldarg.3
            //IL_0023:  ldarg.s    parseDecimal
            //IL_0025:  call       bool System.Number::ParseNumber(char*&,
            //                                                     valuetype System.Globalization.NumberStyles,
            //                                                     valuetype System.Number/NumberBuffer&,
            //                                                     class System.Globalization.NumberFormatInfo,
            //                                                     bool)
            //IL_002a:  brfalse.s  IL_004a

            //IL_002c:  ldloc.1                          
            //IL_002d:  ldloc.0
            //IL_002e:  sub
            //IL_002f:  ldc.i4.2
            //IL_0030:  div
            //IL_0031:  conv.i8
            //IL_0032:  ldarg.0
            //IL_0033:  callvirt   instance int32 System.String::get_Length()
            //IL_0038:  conv.i8
            //IL_0039:  bge.s      IL_005a

            //IL_003b:  ldarg0                       
            //IL_003c:  ldloc.1
            //IL_003d:  ldloc.0
            //IL_003e:  sub
            //IL_003f:  ldc.i4.2
            //IL_0040:  div
            //IL_0041:  conv.i8
            //IL_0042:  conv.i4
            //IL_0043:  call       bool System.Number::TrailingZeros(string,
            //                                                       int32)
            //IL_0048:  brtrue.s   IL_005a

            //IL_004a:  ldstr      "Format_InvalidString"
            //IL_004f:  call       string System.Environment::GetResourceString(string)
            //IL_0054:  newobj     instance void System.FormatException::.ctor(string)
            //IL_0059:  throw

            //IL_005a:  ldnull
            //IL_005b:  stloc.2
            //IL_005c:  ret
            char* V_0, V_1; 
            if (str == null) 
            { 
                throw new ArgumentNullException("String"); 
            } 
            else 
            {
                fixed (char* V_2 = str)
                {
                    V_0 = V_2 != null ? V_2 + RuntimeHelpers.OffsetToStringData : V_2;
                    V_1 = V_0;
                    if (Number.ParseNumber(ref V_1, options, ref number, info, parseDecimal))
                    {
                        if ( (long)((V_1 - V_0) / 2) >= (long)str.Length ||Number.TrailingZeros(str, (int)(long)((V_1 - V_0) / 2)) )
                        { 
                            //V_2 = null; 
                            return; 
                        }                        

                    }
                    
                    throw new FormatException(System.Environment.GetResourceString("Format_InvalidString"));
                    

                }
            }




        }
        private static bool TrailingZeros(string s, int index)
        {
            //.maxstack  2
            //.locals init (int32 V_0)
            //IL_0000:  ldarg.1
            //IL_0001:  stloc.0
            //IL_0002:  br.s       IL_0013

            //IL_0004:  ldarg.0
            //IL_0005:  ldloc.0
            //IL_0006:  callvirt   instance char System.String::get_Chars(int32)
            //IL_000b:  brfalse.s  IL_000f

            //IL_000d:  ldc.i4.0
            //IL_000e:  ret

            //IL_000f:  ldloc.0
            //IL_0010:  ldc.i4.1
            //IL_0011:  add
            //IL_0012:  stloc.0
            //IL_0013:  ldloc.0
            //IL_0014:  ldarg.0
            //IL_0015:  callvirt   instance int32 System.String::get_Length()
            //IL_001a:  blt.s      IL_0004

            //IL_001c:  ldc.i4.1
            //IL_001d:  ret
            for (int V_0 = index; V_0 < s.Length;V_0++ )
            {
                if (s[V_0] != '\0') return false;
            }
            return true;

        }
        internal static bool TryParseDecimal(string @value, NumberStyles options, NumberFormatInfo numfmt, out decimal result)
        {
            //.maxstack  5
            //.locals init (uint8* V_0,                 
            //         valuetype System.Number/NumberBuffer V_1)
            //IL_0000:  ldc.i4.1
            //IL_0001:  ldc.i4.s   114
            //IL_0003:  mul
            //IL_0004:  localloc
            //IL_0006:  stloc.0
            //IL_0007:  ldloca.s   V_1
            //IL_0009:  ldloc.0
            //IL_000a:  newobj     instance void System.Number/NumberBuffer::.ctor(uint8*)
            //IL_000f:  stobj      System.Number/NumberBuffer
            //IL_0014:  ldarg.3
            //IL_0015:  ldc.i4.0
            //IL_0016:  newobj     instance void System.Decimal::.ctor(int32)
            //IL_001b:  stobj      System.Decimal
            //IL_0020:  ldarg.0
            //IL_0021:  ldarg.1
            //IL_0022:  ldloca.s   V_1
            //IL_0024:  ldarg.2
            //IL_0025:  ldc.i4.1
            //IL_0026:  call       bool System.Number::TryStringToNumber(string,
            //                                                          valuetype System.Globalization.NumberStyles,
            //                                                           valuetype System.Number/NumberBuffer&,
            //                                                           class System.Globalization.NumberFormatInfo,
            //                                                           bool)
            //IL_002b:  brtrue.s   IL_002f

            //IL_002d:  ldc.i4.0
            //IL_002e:  ret

            //IL_002f:  ldloca.s   V_1
            //IL_0031:  call       instance uint8* System.Number/NumberBuffer::PackForNative()
            //IL_0036:  ldarg.3
            //IL_0037:  call       bool System.Number::NumberBufferToDecimal(uint8*,
            //                                                               valuetype System.Decimal&)
            //IL_003c:  brtrue.s   IL_0040

            //IL_003e:  ldc.i4.0
            //IL_003f:  ret

            //IL_0040:  ldc.i4.1
            //IL_0041:  ret
            byte* V_0=stackalloc byte[1*114]; 
            System.Number.NumberBuffer V_1;
            V_1=new System.Number.NumberBuffer(V_0);
            result=new decimal(0);
            if(System.Number.TryStringToNumber(@value,options,ref V_1,numfmt,true))
            {
                //IL_002f
                if (System.Number.NumberBufferToDecimal(V_1.PackForNative(), out result))
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            else
            {
                return false;
            }

        }
        internal static bool TryParseDouble(string @value, NumberStyles options, NumberFormatInfo numfmt, out double result)
        {
            //.maxstack  5
            //.locals init (uint8* V_0,                         
            //            valuetype System.Number/NumberBuffer V_1)
            //IL_0000:  ldc.i4.1
            //IL_0001:  ldc.i4.s   114
            //IL_0003:  mul
            //IL_0004:  localloc
            //IL_0006:  stloc.0
            //IL_0007:  ldloca.s   V_1
            //IL_0009:  ldloc.0
            //IL_000a:  newobj     instance void System.Number/NumberBuffer::.ctor(uint8*)
            //IL_000f:  stobj      System.Number/NumberBuffer
            //IL_0014:  ldarg.3
            //IL_0015:  ldc.r8     0.0
            //IL_001e:  stind.r8
            //IL_001f:  ldarg.0
            //IL_0020:  ldarg.1
            //IL_0021:  ldloca.s   V_1
            //IL_0023:  ldarg.2
            //IL_0024:  ldc.i4.0
            //IL_0025:  call       bool System.Number::TryStringToNumber(string,
            //                                                            valuetype System.Globalization.NumberStyles,
            //                                                            valuetype System.Number/NumberBuffer&,
            //                                                            class System.Globalization.NumberFormatInfo,
            //                                                            bool)
            //IL_002a:  brtrue.s   IL_002e

            //IL_002c:  ldc.i4.0
            //IL_002d:  ret

            //IL_002e:  ldloca.s   V_1
            //IL_0030:  call       instance uint8* System.Number/NumberBuffer::PackForNative()
            //IL_0035:  ldarg.3
            //IL_0036:  call       bool System.Number::NumberBufferToDouble(uint8*,
            //                                                                float64&)
            //IL_003b:  brtrue.s   IL_003f

            //IL_003d:  ldc.i4.0
            //IL_003e:  ret

            //IL_003f:  ldc.i4.1
            //IL_0040:  ret
            byte* V_0=stackalloc byte[1*114]; 
            System.Number.NumberBuffer V_1;
            V_1=new System.Number.NumberBuffer(V_0);
            result=0.0d;
            if(System.Number.TryStringToNumber(@value,options,ref V_1,numfmt,false))
          {
                //IL_002e
                if (System.Number.NumberBufferToDouble(V_1.PackForNative(), out result))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }
        internal static bool TryParseInt32(string s, NumberStyles style, NumberFormatInfo info, out int result)
        {
            //.maxstack  5
            //.locals init (uint8* V_0,                               
            //         valuetype System.Number/NumberBuffer V_1)
            //IL_0000:  ldc.i4.1
            //IL_0001:  ldc.i4.s   114
            //IL_0003:  mul
            //IL_0004:  localloc
            //IL_0006:  stloc.0
            //IL_0007:  ldloca.s   V_1
            //IL_0009:  ldloc.0
            //IL_000a:  newobj     instance void System.Number/NumberBuffer::.ctor(uint8*)
            //IL_000f:  stobj      System.Number/NumberBuffer
            //IL_0014:  ldarg.3
            //IL_0015:  ldc.i4.0
            //IL_0016:  stind.i4
            //IL_0017:  ldarg.0
            //IL_0018:  ldarg.1
            //IL_0019:  ldloca.s   V_1
            //IL_001b:  ldarg.2
            //IL_001c:  ldc.i4.0
            //IL_001d:  call       bool System.Number::TryStringToNumber(string,
            //                                                           valuetype System.Globalization.NumberStyles,
            //                                                           valuetype System.Number/NumberBuffer&,
            //                                                           class System.Globalization.NumberFormatInfo,
            //                                                           bool)
            //IL_0022:  brtrue.s   IL_0026

            //IL_0024:  ldc.i4.0
            //IL_0025:  ret

            //IL_0026:  ldarg.1
            //IL_0027:  ldc.i4     0x200
            //IL_002c:  and
            //IL_002d:  brfalse.s  IL_003b

            //IL_002f:  ldloca.s   V_1
            //IL_0031:  ldarg.3
            //IL_0032:  call       bool System.Number::HexNumberToInt32(valuetype System.Number/NumberBuffer&,
            //                                                          int32&)
            //IL_0037:  brtrue.s   IL_0047

            //IL_0039:  ldc.i4.0
            //IL_003a:  ret

            //IL_003b:  ldloca.s   V_1
            //IL_003d:  ldarg.3
            //IL_003e:  call       bool System.Number::NumberToInt32(valuetype System.Number/NumberBuffer&,
            //                                                       int32&)
            //IL_0043:  brtrue.s   IL_0047

            //IL_0045:  ldc.i4.0
            //IL_0046:  ret

            //IL_0047:  ldc.i4.1
            //IL_0048:  ret
            byte* V_0=stackalloc byte[1*114];
            System.Number.NumberBuffer V_1;
            V_1=new System.Number.NumberBuffer(V_0);
            result=0;
            if(System.Number.TryStringToNumber(s,style,ref V_1,info,false))
            {
                //IL_0026
                if ((style & NumberStyles.AllowHexSpecifier) == 0)
                {
                    if (System.Number.NumberToInt32(ref V_1, out result))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    if (System.Number.HexNumberToInt32(ref V_1, out result))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            else
            {
                return false;
            }

        }
        internal static bool TryParseInt64(strin s, NumberStyles style, NumberFormatInfo info, out long result)
        {
            //.maxstack  5
            //.locals init (uint8* V_0,
            //         valuetype System.Number/NumberBuffer V_1)
            //IL_0000:  ldc.i4.1
            //IL_0001:  ldc.i4.s   114
            //IL_0003:  mul
            //IL_0004:  localloc
            //IL_0006:  stloc.0
            //IL_0007:  ldloca.s   V_1
            //IL_0009:  ldloc.0
            //IL_000a:  newobj     instance void System.Number/NumberBuffer::.ctor(uint8*)
            //IL_000f:  stobj      System.Number/NumberBuffer
            //IL_0014:  ldarg.3
            //IL_0015:  ldc.i4.0
            //IL_0016:  conv.i8
            //IL_0017:  stind.i8
            //IL_0018:  ldarg.0
            //IL_0019:  ldarg.1
            //IL_001a:  ldloca.s   V_1
            //IL_001c:  ldarg.2
            //IL_001d:  ldc.i4.0
            //IL_001e:  call       bool System.Number::TryStringToNumber(string,
            //                                                           valuetype System.Globalization.NumberStyles,
            //                                                           valuetype System.Number/NumberBuffer&,
            //                                                           class System.Globalization.NumberFormatInfo,
            //                                                           bool)
            //IL_0023:  brtrue.s   IL_0027

            //IL_0025:  ldc.i4.0
            //IL_0026:  ret

            //IL_0027:  ldarg.1
            //IL_0028:  ldc.i4     0x200
            //IL_002d:  and
            //IL_002e:  brfalse.s  IL_003c

            //IL_0030:  ldloca.s   V_1
            //IL_0032:  ldarg.3
            //IL_0033:  call       bool System.Number::HexNumberToInt64(valuetype System.Number/NumberBuffer&,
            //                                                          int64&)
            //IL_0038:  brtrue.s   IL_0048

            //IL_003a:  ldc.i4.0
            //IL_003b:  ret

            //IL_003c:  ldloca.s   V_1
            //IL_003e:  ldarg.3
            //IL_003f:  call       bool System.Number::NumberToInt64(valuetype System.Number/NumberBuffer&,
            //                                                       int64&)
            //IL_0044:  brtrue.s   IL_0048

            //IL_0046:  ldc.i4.0
            //IL_0047:  ret

            //IL_0048:  ldc.i4.1
            //IL_0049:  ret
            byte* V_0 = stackalloc byte[1 * 114];
            System.Number.NumberBuffer V_1;
            V_1 = new System.Number.NumberBuffer(V_0);
            result = 0L;
            if (System.Number.TryStringToNumber(s, style, ref V_1, info, false))
            {
                //IL_0026
                if ((style & NumberStyles.AllowHexSpecifier) == 0)
                {
                    if (System.Number.NumberToInt64(ref V_1, out result))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    if (System.Number.HexNumberToInt64(ref V_1, out result))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            else
            {
                return false;
            }
        }
        internal static bool TryParseSingle(string @value, NumberStyles options, NumberFormatInfo numfmt, out float result)
        {
            //.maxstack  5
            //.locals init (uint8* V_0,
            //         valuetype System.Number/NumberBuffer V_1,
            //         float64 V_2,
            //         float32 V_3)
            //IL_0000:  ldc.i4.1
            //IL_0001:  ldc.i4.s   114
            //IL_0003:  mul
            //IL_0004:  localoc
            //IL_0006:  stloc.0
            //IL_0007:  ldloca.s   V_1
            //IL_0009:  ldloc.0
            //IL_000a:  newobj     instance void System.Number/NumberBuffer::.ctor(uint8*)
            //IL_000f:  stobj      System.Number/NumberBuffer
            //IL_0014:  ldarg.3
            //IL_0015:  ldc.r4     0.0
            //IL_001a:  stind.r4
            //IL_001b:  ldc.r8     0.0
            //IL_0024:  stloc.2
            //IL_0025:  ldarg.0
            //IL_0026:  ldarg.1
            //IL_0027:  ldloca.s   V_1
            //IL_0029:  ldarg.2
            //IL_002a:  ldc.i4.0
            //IL_002b:  call       bool System.Number::TryStringToNumber(string,
            //                                                           valuetype System.Globalization.NumberStyles,
            //                                                           valuetype System.Number/NumberBuffer&,
            //                                                           class System.Globalization.NumberFormatInfo,
            //                                                           bool)
            //IL_0030:  brtrue.s   IL_0034

            //IL_0032:  ldc.i4.0
            //IL_0033:  ret

            //IL_0034:  ldloca.s   V_1
            //IL_0036:  call       instance uint8* System.Number/NumberBuffer::PackForNative()
            //IL_003b:  ldloca.s   V_2
            //IL_003d:  call       bool System.Number::NumberBufferToDouble(uint8*,
            //                                                              float64&)
            //IL_0042:  brtrue.s   IL_0046

            //IL_0044:  ldc.i4.0
            //IL_0045:  ret

            //IL_0046:  ldloc.2
            //IL_0047:  conv.r4
            //IL_0048:  stloc.3
            //IL_0049:  ldloc.3
            //IL_004a:  call       bool System.Single::IsInfinity(float32)
            //IL_004f:  brfalse.s  IL_0053

            //IL_0051:  ldc.i4.0
            //IL_0052:  ret

            //IL_0053:  ldarg.3
            //IL_0054:  ldloc.3
            //IL_0055:  stind.r4
            //IL_0056:  ldc.i4.1
            //IL_0057:  ret
        }
        internal static bool TryParseUInt32(string s, NumberStyles style, NumberFormatInfo info, out uint result)
        {
            //.maxstack  5
            //.locals init (uint8* V_0,
            //         valuetype System.Number/NumberBuffer V_1)
            //IL_0000:  ldc.i4.1
            //IL_0001:  ldc.i4.s   114
            //IL_0003:  mul
            //IL_0004:  localloc
            //IL_0006:  stloc.0
            //IL_0007:  ldloca.s   V_1
            //IL_0009:  ldloc.0
            //IL_000a:  newobj     instance void System.Number/NumberBuffer::.ctor(uint8*)
            //IL_000f:  stobj      System.Number/NumberBuffer
            //IL_0014:  ldarg.3
            //IL_0015:  ldc.i4.0
            //IL_0016:  stind.i4
            //IL_0017:  ldarg.0
            //IL_0018:  ldarg.1
            //IL_0019:  ldloca.s   V_1
            //IL_001b:  ldarg.2
            //IL_001c:  ldc.i4.0
            //IL_001d:  call       bool System.Number::TryStringToNumber(string,
            //                                                           valuetype System.Globalization.NumberStyles,
            //                                                           valuetype System.Number/NumberBuffer&,
            //                                                           class System.Globalization.NumberFormatInfo,
            //                                                           bool)
            //IL_0022:  brtrue.s   IL_0026

            //IL_0024:  ldc.i4.0
            //IL_0025:  ret

            //IL_0026:  ldarg.1
            //IL_0027:  ldc.i4     0x200
            //IL_002c:  and
            //IL_002d:  brfalse.s  IL_003b

            //IL_002f:  ldloca.s   V_1
            //IL_0031:  ldarg.3
            //IL_0032:  call       bool System.Number::HexNumberToUInt32(valuetype System.Number/NumberBuffer&,
          //                                                           uint32&)
            //IL_0037:  brtrue.s   IL_0047

            //IL_0039:  ldc.i4.0
            //IL_003a:  ret

            //IL_003b:  ldloca.s   V_1
            //IL_003d:  ldarg.3
            //IL_003e:  call       bool System.Number::NumberToUInt32(valuetype System.Number/NumberBuffer&,
            //                                                        uint32&)
            //IL_0043:  brtrue.s   IL_0047

            //IL_0045:  ldc.i4.0
            //IL_0046:  ret

            //IL_0047:  ldc.i4.1
            //IL_0048:  ret
            byte* V_0 = stackalloc byte[1 * 114];
            System.Number.NumberBuffer V_1;
            V_1 = new System.Number.NumberBuffer(V_0);
            result = 0;
            if (System.Number.TryStringToNumber(s, style, ref V_1, info, false))
            {
                //IL_0026
                if ((style & NumberStyles.AllowHexSpecifier) == 0)
                {
                    if (System.Number.NumberToUInt32(ref V_1, out result))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    if (System.Number.HexNumberToUInt32(ref V_1, out result))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            else
            {
                return false;
            }
        }
        internal static bool TryParseUInt64(string s, NumberStyles style, NumberFormatInfo info, out ulong result)
        {
            //.maxstack  5
            //.locals init (uint8* V_0,
            //         valuetype System.Number/NumberBuffer V_1)
            //IL_0000:  ldc.i4.1
            //IL_0001:  ldc.i4.s   114
            //IL_0003:  mul
            //IL_0004:  localloc
            //IL_0006:  stloc.0
            //IL_0007:  ldloca.s   V_1
            //IL_0009:  ldloc.0
            //IL_000a:  newobj     instance void System.Number/NumberBuffer::.ctor(uint8*)
            //IL_000f:  stobj      System.Number/NumberBuffer
            //IL_0014:  ldarg.3
            //IL_0015:  ldc.i4.0
            //IL_0016:  conv.i8
            //IL_0017:  stind.i8
            //IL_0018:  ldarg.0
            //IL_0019:  ldarg.1
            //IL_001a:  ldloca.s   V_1
            //IL_001c:  ldarg.2
            //IL_001d:  ldc.i4.0
            //IL_001e:  call       bool System.Number::TryStringToNumber(string,
            //                                                           valuetype System.Globalization.NumberStyles,
            //                                                           valuetype System.Number/NumberBuffer&,
            //                                                           class System.Globalization.NumberFormatInfo,
            //                                                           bool)
            //IL_0023:  brtrue.s   IL_0027

            //IL_0025:  ldc.i4.0
            //IL_0026:  ret

            //IL_0027:  ldarg.1
            //IL_0028:  ldc.i4     0x200
            //IL_002d:  and
            //IL_002e:  brfalse.s  IL_003c

            //IL_0030:  ldloca.s   V_1
            //IL_0032:  ldarg.3
            //IL_0033:  call       bool System.Number::HexNumberToUInt64(valuetype System.Number/NumberBuffer&,
            //                                                           uint64&)
            //IL_0038:  brtrue.s   IL_0048

            //IL_003a:  ldc.i4.0
            //IL_003b:  ret

            //IL_003c:  ldloca.s   V_1
            //IL_003e:  ldarg.3
            //IL_003f:  call       bool System.Number::NumberToUInt64(valuetype System.Number/NumberBuffer&,
            //                                                      uint64&)
            //IL_0044:  brtrue.s   IL_0048

            //IL_0046:  ldc.i4.0
            //IL_0047:  ret

            //IL_0048:  ldc.i4.1
            //IL_0049:  ret
            byte* V_0 = stackalloc byte[1 * 114];
            System.Number.NumberBuffer V_1;
            V_1 = new System.Number.NumberBuffer(V_0);
            result = 0uL;
            if (System.Number.TryStringToNumber(s, style, ref V_1, info, false))
            {
                //IL_0026
                if ((style & NumberStyles.AllowHexSpecifier) == 0)
                {
                    if (System.Number.NumberToUInt64(ref V_1, out result))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    if (System.Number.HexNumberToUInt64(ref V_1, out result))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            else
            {
                return false;
            }
        }
        private static bool TryStringToNumber(string str, NumberStyles options, ref NumberBuffer number, NumberFormatInfo numfmt, bool parseDecimal)
        {
            //.maxstack  5
            //.locals init (char* V_0,                                     
            //         char* V_1,
            //         bool V_2,
            //         string pinned V_3)
            //IL_0000:  ldarg.0
            //IL_0001:  brtrue.s   IL_0005

            //IL_0003:  ldc.i4.0
            //IL_0004:  ret

            //IL_0005:  ldarg.0
            //IL_0006:  stloc.3
            //IL_0007:  ldloc.3
            //IL_0008:  conv.i
            //IL_0009:  dup
            //IL_000a:  brfalse.s  IL_0012

            //IL_000c:  call       int32 System.Runtime.CompilerServices.RuntimeHelpers::get_OffsetToStringData()
            //IL_0011:  add
            //IL_0012:  stloc.0
            //IL_0013:  ldloc.0
            //IL_0014:  stloc.1
            //IL_0015:  ldloca.s   V_1                         
            //IL_0017:  ldarg.1
            //IL_0018:  ldarg.2
            //IL_0019:  ldarg.3
            //IL_001a:  ldarg.s    parseDecimal
            //IL_001c:  call       bool System.Number::ParseNumber(char*&,
            //                                                     valuetype System.Globalization.NumberStyles,
            //                                                     valuetype System.Number/NumberBuffer&,
            //                                                     class System.Globalization.NumberFormatInfo,
            //                                                     bool)
            //IL_0021:  brfalse.s  IL_0041

            //IL_0023:  ldloc.1                        
            //IL_0024:  ldloc.0
            //IL_0025:  sub
            //IL_0026:  ldc.i4.2
            //IL_0027:  div
            //IL_0028:  conv.i8
            //IL_0029:  ldarg.0
            //IL_002a:  callvirt   instance int32 System.String::get_Length()
            //IL_002f:  conv.i8
            //IL_0030:  bge.s      IL_0045

            //IL_0032:  ldarg.0                
            //IL_0033:  ldloc.1
            //IL_0034:  ldloc.0
            //IL_0035:  sub
            //IL_0036:  ldc.i4.2
            //IL_0037:  div
            //IL_0038:  conv.i8
            //IL_0039:  conv.i4
            //IL_003a:  call       bool System.Number::TrailingZeros(string,
            //                                                       int32)
            //IL_003f:  brtrue.s   IL_0045

            //IL_0041:  ldc.i4.0
            //IL_0042:  stloc.2
            //IL_0043:  leave.s    IL_0049

            //IL_0045:  ldnull
            //IL_0046:  stloc.
            //IL_0047:  ldc.i4.1
            //IL_0048:  ret

            //IL_0049:  ldloc.2
            //IL_004a:  ret
            char* V_0, V_1;
            bool V_2;

            if (str == null)
            {
                return false;
            }
            else
            {
                fixed (char* V_3 = str)
                {
                    V_0 = V_3 == null ? V_3 : V_3 + System.Runtime.CompilerServices.RuntimeHelpers.OffsetToStringData;
                    V_1 = V_0;
                    if (ParseNumber(ref V_1, options, ref number, numfmt, parseDecimal))
                    {
                        //IL_0023
                        if ((int)(long)((V_1 - V_0) / 2) >= (long)str.Length)
                        {
                            //IL_0045
                            //V_3 = null;
                            return true;
                        }
                        else
                        {
                            //IL_0032
                            if (TrailingZeros(str, (int)(long)((V_1 - V_0) / 2)))
                            {
                                //IL_0045
                                //V_3 = null;
                                return true;
                            }
                            else
                            {
                                V_2 = false;
                                return V_2;
                            }
                        }

                    }
                    else
                    {
                        //IL_0041
                        V_2 = false;
                        return V_2;
                    }
                }
            }
        }



    }

}

转载于:https://www.cnblogs.com/MSIL/articles/1811407.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值