System.Single

using System.Globalization;
using System.Runtime.InteropServices;
namespace System
{
    [StructLayout(LayoutKind.Sequential),Serializable]
    [ComVisible(true)]
    public struct Single:System.IComparable,System.IFormattable,System.IConvertible,System.IComparable<float>,System.IEquatable<float>
    {      
      public const float MinValue = -3.4028235e+038f; //=-(2-1/(2^23))*2^127
      public const float Epsilon = 1.4012985e-045f;   //所能表示的最小正数=1/(2^23)*2^-126
      public const float MaxValue = 3.4028235e+038f; //=(2-1/(2^23))*2^127
      public const float PositiveInfinity = System.BitConverter.ToSingle(System.BitConverter.GetBytes(0x7F800000),0);//符号位0指数位全为1,尾数位全为0
      public const float NegativeInfinity = System.BitConverter.ToSingle(System.BitConverter.GetBytes(0xFF800000), 0);//符号位1指数位全为1,尾数位全为0
      public const float NaN = System.BitConverter.ToSingle(System.BitConverter.GetBytes(0xFFC00000), 0);//符号位1指数位全为1,尾数位第一位为1其余全为0
      internal float m_value;
      public static bool IsInfinity(float f)
      {
        // 代码大小       18 (0x12)
        //.maxstack  8
        //IL_0000:  ldarga.s   f
        //IL_0002:  conv.u
        //IL_0003:  ldind.i4
        //IL_0004:  ldc.i4     0x7fffffff
        //IL_0009:  and
        //IL_000a:  ldc.i4     0x7f800000
        //IL_000f:  ceq
        //IL_0011:  ret
          //最高位为符号位,后续8位为正偏127的以8位无符号数表示的以2为底的指数,最后23位为无符号的尾数
          return (*((int*)&f) & 0x7fffffff) == 0x7f800000;
          
      }

      public static bool IsPositiveInfinity(float f)
      {
        // 代码大小       12 (0xc)
        //.maxstack  8
        //IL_0000:  ldarga.s   f
        //IL_0002:  conv.u
        //IL_0003:  ldind.i4
        //IL_0004:  ldc.i4     0x7f800000
        //IL_0009:  ceq
        //IL_000b:  ret
          return *((int*)&f) == 0x7f800000;
      }

      public static bool IsNegativeInfinity(float f)
      {
        // 代码大小       12 (0xc)
        //.maxstack  8
        //IL_0000:  ldarga.s   f
        //IL_0002:  conv.u
        //IL_0003:  ldind.i4
        //IL_0004:  ldc.i4     0xff800000
        //IL_0009:  ceq
        //IL_000b:  ret
          return *((int*)&f) == 0xff800000;
      } 

      [System.Runtime.ConstrainedExecution.ReliabilityContractAttribute(System.Runtime.ConstrainedExecution.Consistency.WillNotCorruptState,System.Runtime.ConstrainedExecution.Cer.Success)]
      public static bool IsNaN(float f)
      {        
        // 代码大小       8 (0x8)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldarg.0
        //IL_0002:  beq.s      IL_0006

        //IL_0004:  ldc.i4.1
        //IL_0005:  ret

        //IL_0006:  ldc.i4.0
        //IL_0007:  ret
          //NaN is not equal to anything even itself.
          return f == f ? false : true;
      }

      public new virtual sealed int32 CompareTo(object @value)
      {
        // 代码大小       80 (0x50)
        //.maxstack  2
        //.locals init (float32 V_0)                              
        //IL_0000:  ldarg.1
        //IL_0001:  brtrue.s   IL_0005

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

        //IL_0005:  ldarg.1
        //IL_0006:  isinst     System.Single
        //IL_000b:  brfalse.s  IL_0040

        //IL_000d:  ldarg.1                        
        //IL_000e:  unbox.any  System.Single
        //IL_0013:  stloc.0
        //IL_0014:  ldarg.0
        //IL_0015:  ldind.r4
        //IL_0016:  ldloc.0
        //IL_0017:  bge.un.s   IL_001b

        //IL_0019:  ldc.i4.m1
        //IL_001a:  ret

        //IL_001b:  ldarg.0
        //IL_001c:  ldind.r4
        //IL_001d:  ldloc.0
        //IL_001e:  ble.un.s   IL_0022

        //IL_0020:  ldc.i4.1
        //IL_0021:  ret

        //IL_0022:  ldarg.0                
        //IL_0023:  ldind.r4
        //IL_0024:  ldloc.0
        //IL_0025:  bne.un.s   IL_0029

        //IL_0027:  ldc.i4.0
        //IL_0028:  ret

        //IL_0029:  ldarg.0                   
        //IL_002a:  ldind.r4
        //IL_002b:  call       bool System.Single::IsNaN(float32)
        //IL_0030:  brfalse.s  IL_003e

        //IL_0032:  ldloc.0
        //IL_0033:  call       bool System.Single::IsNaN(float32)
        //IL_0038:  brtrue.s   IL_003c

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

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

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

        //IL_0040:  ldstr      "Arg_MustBeSingle"
        //IL_0045:  call       string System.Environment::GetResourceString(string)
        //IL_004a:  newobj     instance void System.ArgumentException::.ctor(string)
        //IL_004f:  throw
          float V_0;
          if(@value==null)
          {
              return 1;
          }
          else
          {
              if(@value as float==null)
              {
                  //IL_0040
                  throw new System.ArgumentException(System.Environment.GetResourceString("Arg_MustBeSingle"));
              }
              else
              {
                  //IL_000d
                  V_0=(float)@value;
                  if(this>=V_0)
                  {
                      if(this<=V_0)
                      {
                          //IL_0022
                          if(this!=V_0)
                          {
                              //IL_0029
                              if(float.IsNaN(this))
                              {
                                  if(float.IsNaN(V_0))
                                  {
                                      return 0;
                                  }
                                  else
                                  {
                                      return -1;
                                  }
                              }
                              else
                              {
                                  return 1;
                              }
                          }
                          else
                          {
                              return 0;
                          }
                      }
                      else 
                      {
                          return 1;
                      }
                  }
                  else
                  {
                      return -1;
                  }
              }              
          }
      } 

      public new virtual sealed int CompareTo(float @value)
      {
        // 代码大小       44 (0x2c)
        //.maxstack  8                                   
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  ldarg.1
        //IL_0003:  bge.un.s   IL_0007

        //IL_0005:  ldc.i4.m1
        //IL_0006:  ret

        //IL_0007:  ldarg.0
        //IL_0008:  ldind.r4
        //IL_0009:  ldarg.1
        //IL_000a:  ble.un.s   IL_000e

        //IL_000c:  ldc.i4.1
        //IL_000d:  ret

        //IL_000e:  ldarg.0
        //IL_000f:  ldind.r4
        //IL_0010:  ldarg.1
        //IL_0011:  bne.un.s   IL_0015

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

        //IL_0015:  ldarg.0                      
        //IL_0016:  ldind.r4
        //IL_0017:  call       bool System.Single::IsNaN(float32)
        //IL_001c:  brfalse.s  IL_002a

        //IL_001e:  ldarg.1
        //IL_001f:  call       bool System.Single::IsNaN(float32)
        //IL_0024:  brtrue.s   IL_0028

        //IL_0026:  ldc.i4.m1
        //IL_0027:  ret

        //IL_0028:  ldc.i4.0
        //IL_0029:  ret

        //IL_002a:  ldc.i4.1
        //IL_002b:  ret
          if(this>=@value)
          {
              if(this<=@value)
              {
                  if(this!=@value)
                  {
                      //IL_0015 
                      if(float.IsNaN(this))
                      {
                          if(float.IsNaN(@value))
                          {
                              return 0;
                          }
                          else
                          {return -1;
                          }
                      }
                      else
                      {
                          return 1;
                      }
                  }
                  else
                  {
                      return 0;
                  }
              }
              else 
              {
                  return 1;
              }
          }
          else
          {
              return -1;
          }
      }

      public override bool Equals(object obj)
      {
        // 代码大小       42 (0x2a)
        //.maxstack  2
        //.locals init (float32 V_0)
        //IL_0000:  ldarg.1
        //IL_0001:  isinst     System.Single
        //IL_0006:  brtrue.s   IL_000a

        //IL_0008:  ldc.i4.0
        //IL_0009:  ret

        //IL_000a:  ldarg.1
        //IL_000b:  unbox.any  System.Single
        //IL_0010:  stloc.0
        //IL_0011:  ldloc.0
        //IL_0012:  ldarg.0
        //IL_0013:  ldind.r4
        //IL_0014:  bne.un.s   IL_0018

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

        //IL_0018:  ldloc.0
        //IL_0019:  call       bool System.Single::IsNaN(float32)
        //IL_001e:  brfalse.s  IL_0028

        //IL_0020:  ldarg.0
        //IL_0021:  ldind.r4
        //IL_0022:  call       bool System.Single::IsNaN(float32)
        //IL_0027:  ret

        //IL_0028:  ldc.i4.0
        //IL_0029:  ret
          float V_0;
          if (obj as float == null) 
          {
              return false;
          } 
          else 
          {
              V_0=(float)obj;
              if (V_0 != this) 
              {
                  if (float.IsNaN(V_0))
                  {
                      return float.IsNaN(this);                      
                  }
                  else
                  {
                      return false;
                  }
              } 
              else { return true; }
          }

      } 

      public new virtual sealed bool Equals(float obj)
      {
        // 代码大小       25 (0x19)
        //.maxstack  8
        //IL_0000:  ldarg.1
        //IL_0001:  ldarg.0
        //IL_0002:  ldind.r4
        //IL_0003:  bne.un.s   IL_0007

        //IL_0005:  ldc.i4.1
        //IL_0006:  ret

        //IL_0007:  ldarg.1
        //IL_0008:  call       bool System.Single::IsNaN(float32)
        //IL_000d:  brfalse.s  IL_0017

        //IL_000f:  ldarg.0
        //IL_0010:  ldind.r4
        //IL_0011:  call       bool System.Single::IsNaN(float32)
        //IL_0016:  ret

        //IL_0017:  ldc.i4.0
        //IL_0018:  ret
          if (obj != this)
          {
              if (float.IsNaN(obj))
              {
                  return float.IsNaN(this);
              }
              else
              {
                  return false;
              }
          }
          else
          {
              return true;
          }

      } 

      public override int GetHashCode()
      {
        // 代码大小       20 (0x14)
        //.maxstack  2
        //.locals init (float32 V_0,
        //         int32 V_1)
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  stloc.0
        //IL_0003:  ldloc.0
        //IL_0004:  ldc.r4     0.0
        //IL_0009:  bne.un.s   IL_000d

        //IL_000b:  ldc.i4.0
        //IL_000c:  ret

        //IL_000d:  ldloca.s   V_0
        //IL_000f:  conv.u
        //IL_0010:  ldind.i4
        //IL_0011:  stloc.1
        //IL_0012:  ldloc.1
        //IL_0013:  ret
          float V_0;
          int V_1;
          V_0 = this;
          if (V_0 != 0.0f)
          {
              V_1=*((int*)&V_0);
              return V_1;
          }
          else
          {
              return 0;
          }
      }

      public override string ToString()
      {
        // 代码大小       14 (0xe)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  ldnull
        //IL_0003:  call       class System.Globalization.NumberFormatInfo System.Globalization.NumberFormatInfo::get_CurrentInfo()
        //IL_0008:  call       string System.Number::FormatSingle(float32,
        //                                                        string,
        //                                                        class System.Globalization.NumberFormatInfo)
        //IL_000d:  ret
          return System.Number.FormatSingle(this,null,NumberFormatInfo.CurrentInfo);
      }

      public new virtual sealed string ToString(System.IFormatProvider provider)
      {
        // 代码大小       15 (0xf)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  ldnull
        //IL_0003:  ldarg.1
        //IL_0004:  call       class System.Globalization.NumberFormatInfo System.Globalization.NumberFormatInfo::GetInstance(class System.IFormatProvider)
        //IL_0009:  call       string System.Number::FormatSingle(float32,
        //                                                        string,
        //                                                        class System.Globalization.NumberFormatInfo)
        //IL_000e:  ret
          return System.Number.FormatSingle(this, null, NumberFormatInfo.GetInstance(provider));
      }

      public string ToString(string format)
      {
        // 代码大小       14 (0xe)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  ldarg.1
        //IL_0003:  call       class System.Globalization.NumberFormatInfo System.Globalization.NumberFormatInfo::get_CurrentInfo()
        //IL_0008:  call       string System.Number::FormatSingle(float32,
        //                                                        string,
        //                                                        class System.Globalization.NumberFormatInfo)
        //IL_000d:  ret
          return System.Number.FormatSingle(this, format, NumberFormatInfo.CurrentInfo);
      } 

      public new virtual sealed string  ToString(string format,System.IFormatProvider provider)
      {
        // 代码大小       15 (0xf)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  ldarg.1
        //IL_0003:  ldarg.2
        //IL_0004:  call       class System.Globalization.NumberFormatInfo System.Globalization.NumberFormatInfo::GetInstance(class System.IFormatProvider)
        //IL_0009:  call       string System.Number::FormatSingle(float32,
        //                                                        string,
        //                                                        class System.Globalization.NumberFormatInfo)
        //IL_000e:  ret
          return System.Number.FormatSingle(this, format, NumberFormatInfo.GetInstance(provider));
      } 

      public static float Parse(string s)
      {
        // 代码大小       17 (0x11)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldc.i4     0xe7
        //IL_0006:  call       class System.Globalization.NumberFormatInfo System.Globalization.NumberFormatInfo::get_CurrentInfo()
        //IL_000b:  call       float32 System.Single::Parse(string,
        //                                                  valuetype System.Globalization.NumberStyles,
        //                                                  class System.Globalization.NumberFormatInfo)
        //IL_0010:  ret
          return System.Single.Parse(s, NumberStyles.AllowThousands|NumberStyles.Float, NumberFormatInfo.CurrentInfo);
      }

      public static float Parse(string s,System.Globalization.NumberStyles style)
      {
        // 代码大小       19 (0x13)
        //.maxstack  8
        //IL_0000:  ldarg.1
        //IL_0001:  call       void System.Globalization.NumberFormatInfo::ValidateParseStyleFloatingPoint(valuetype System.Globalization.NumberStyles)
        //IL_0006:  ldarg.0
        //IL_0007:  ldarg.1
        //IL_0008:  call       class System.Globalization.NumberFormatInfo System.Globalization.NumberFormatInfo::get_CurrentInfo()
        //IL_000d:  call       float32 System.Single::Parse(string,
        //                                                  valuetype System.Globalization.NumberStyles,
        //                                                  class System.Globalization.NumberFormatInfo)
        //IL_0012:  ret
          NumberFormatInfo.ValidateParseStyleFloatingPoint(style);
          return System.Single.Parse(s, style, NumberFormatInfo.CurrentInfo); 
      }

      public static float Parse(string s,System.IFormatProvider provider)
      {
        // 代码大小       18 (0x12)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldc.i4     0xe7
        //IL_0006:  ldarg.1
        //IL_0007:  call       class System.Globalization.NumberFormatInfo System.Globalization.NumberFormatInfo::GetInstance(class System.IFormatProvider)
        //IL_000c:  call       float32 System.Single::Parse(string,
        //                                                  valuetype System.Globalization.NumberStyles,
        //                                                  class System.Globalization.NumberFormatInfo)
        //IL_0011:  ret
          return System.Single.Parse(s, NumberStyles.AllowThousands | NumberStyles.Float, NumberFormatInfo.GetInstance(provider)); 
      }

      public static float Parse(string s,System.Globalization.NumberStyles style,System.IFormatProvider provider)
      {
        // 代码大小       20 (0x14)
        //.maxstack  8
        //IL_0000:  ldarg.1
        //IL_0001:  call       void System.Globalization.NumberFormatInfo::ValidateParseStyleFloatingPoint(valuetype System.Globalization.NumberStyles)
        //IL_0006:  ldarg.0
        //IL_0007:  ldarg.1
        //IL_0008:  ldarg.2
        //IL_0009:  call       class System.Globalization.NumberFormatInfo System.Globalization.NumberFormatInfo::GetInstance(class System.IFormatProvider)
        //IL_000e:  call       float32 System.Single::Parse(string,
        //                                                  valuetype System.Globalization.NumberStyles,
        //                                                  class System.Globalization.NumberFormatInfo)
        //IL_0013:  ret
          NumberFormatInfo.ValidateParseStyleFloatingPoint(style);
          return System.Single.Parse(s, style, NumberFormatInfo.GetInstance(provider)); 
      } 

      private static float Parse(string s,System.Globalization.NumberStyles style,System.Globalization.NumberFormatInfo info)
      {
        // 代码大小       89 (0x59)
        //.maxstack  3
        //.locals init (string V_0,               
        //         float32 V_1)
        //.try
        //{
        //  IL_0000:  ldarg.0
        //  IL_0001:  ldarg.1
        //  IL_0002:  ldarg.2
        //  IL_0003:  call       float32 System.Number::ParseSingle(string,
        //                                                          valuetype System.Globalization.NumberStyles,
        //                                                          class System.Globalization.NumberFormatInfo)
        //  IL_0008:  stloc.1
        //  IL_0009:  leave.s    IL_0057

        //}  // end .try
        //catch System.FormatException 
        //{
        //  IL_000b:  pop                              
        //  IL_000c:  ldarg.0
        //  IL_000d:  callvirt   instance string System.String::Trim()
        //  IL_0012:  stloc.0
        //  IL_0013:  ldloc.0
        //  IL_0014:  ldarg.2
        //  IL_0015:  callvirt   instance string System.Globalization.NumberFormatInfo::get_PositiveInfinitySymbol()
        //  IL_001a:  callvirt   instance bool System.String::Equals(string)
        //  IL_001f:  brfalse.s  IL_0029

        //  IL_0021:  ldc.r4     (00 00 80 7F)
        //  IL_0026:  stloc.1
        //  IL_0027:  leave.s    IL_0057

        //  IL_0029:  ldloc.0             
        //  IL_002a:  ldarg.2
        //  IL_002b:  callvirt   instance string System.Globalization.NumberFormatInfo::get_NegativeInfinitySymbol()
        //  IL_0030:  callvirt   instance bool System.String::Equals(string)
        //  IL_0035:  brfalse.s  IL_003f

        //  IL_0037:  ldc.r4     (00 00 80 FF)
        //  IL_003c:  stloc.1
        //  IL_003d:  leave.s    IL_0057

        //  IL_003f:  ldloc.0
        //  IL_0040:  ldarg.2
        //  IL_0041:  callvirt   instance string System.Globalization.NumberFormatInfo::get_NaNSymbol()
        //  IL_0046:  callvirt   instance bool System.String::Equals(string)
        //  IL_004b:  brfalse.s  IL_0055

        //  IL_004d:  ldc.r4     (00 00 C0 FF)
        //  IL_0052:  stloc.1
        //  IL_0053:  leave.s    IL_0057

        //  IL_0055:  rethrow
        //}  // end handler
        //IL_0057:  ldloc.1
        //IL_0058:  ret
          string V_0;
          float V_1;
          try
          {
              V_1 = System.Number.ParseSingle(s, style, info);
          }
          catch (System.FormatException)
          {
              //IL_000b: 
              V_0=s.Trim();
              if(V_0.Equals(info.PositiveInfinitySymbol))
              {
                  V_1 = float.PositiveInfinity;                  
              }
              else
              {
                  //IL_0029
                  if (V_0.Equals(info.NegativeInfinitySymbol)) 
                  {
                      V_1 = float.NegativeInfinity; 
                  }
                  else 
                  { 
                      if (V_0.Equals(info.NaNSymbol)) 
                      {
                          V_1 = float.NaN; 
                      }
                      else 
                      { 
                          throw; 
                      } 
                  }
              }
          }
          return V_1;
          
      }

      public static bool TryParse(string s,out float result)
      {
        // 代码大小       18 (0x12)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldc.i4     0xe7
        //IL_0006:  call       class System.Globalization.NumberFormatInfo System.Globalization.NumberFormatInfo::get_CurrentInfo()
        //IL_000b:  ldarg.1
        //IL_000c:  call       bool System.Single::TryParse(string,
        //                                                  valuetype System.Globalization.NumberStyles,
        //                                                  class System.Globalization.NumberFormatInfo,
        //                                                  float32&)
        //IL_0011:  ret
          return System.Single.TryParse(s,NumberStyles.AllowThousands | NumberStyles.Float,NumberFormatInfo.CurrentInfo,out result);
      } 

      public static bool TryParse(string s,System.Globalization.NumberStyles style,System.IFormatProvider provider,out float result)
      {
        // 代码大小       21 (0x15)
        //.maxstack  8
        //IL_0000:  ldarg.1
        //IL_0001:  call       void System.Globalization.NumberFormatInfo::ValidateParseStyleFloatingPoint(valuetype System.Globalization.NumberStyles)
        //IL_0006:  ldarg.0
        //IL_0007:  ldarg.1
        //IL_0008:  ldarg.2
        //IL_0009:  call       class System.Globalization.NumberFormatInfo System.Globalization.NumberFormatInfo::GetInstance(class System.IFormatProvider)
        //IL_000e:  ldarg.3
        //IL_000f:  call       bool System.Single::TryParse(string,
        //                                                  valuetype System.Globalization.NumberStyles,
        //                                                  class System.Globalization.NumberFormatInfo,
        //                                                  float32&)
        //IL_0014:  ret
          NumberFormatInfo.ValidateParseStyleFloatingPoint(style);
          return System.Single.TryParse(s, style, NumberFormatInfo.GetInstance(provider), out result);
      }

      private static bool TryParse(string s,System.Globalization.NumberStyles style,System.Globalization.NumberFormatInfo info,out float result)
      {
        // 代码大小       105 (0x69)
        //.maxstack  4
        //.locals init (bool V_0,                         
        //         string V_1)
        //IL_0000:  ldarg.0
        //IL_0001:  brtrue.s   IL_000c

        //IL_0003:  ldarg.3
        //IL_0004:  ldc.r4     0.0
        //IL_0009:  stind.r4
        //IL_000a:  ldc.i4.0
        //IL_000b:  ret

        //IL_000c:  ldarg.0
        //IL_000d:  ldarg.1
        //IL_000e:  ldarg.2
        //IL_000f:  ldarg.3
        //IL_0010:  call       bool System.Number::TryParseSingle(string,
        //                                                        valuetype System.Globalization.NumberStyles,
        //                                                        class System.Globalization.NumberFormatInfo,
        //                                                        float32&)
        //IL_0015:  stloc.0
        //IL_0016:  ldloc.0
        //IL_0017:  brtrue.s   IL_0067

        //IL_0019:  ldarg.0                                      
        //IL_001a:  callvirt   instance string System.String::Trim()
        //IL_001f:  stloc.1
        //IL_0020:  ldloc.1
        //IL_0021:  ldarg.2
        //IL_0022:  callvirt   instance string System.Globalization.NumberFormatInfo::get_PositiveInfinitySymbol()
        //IL_0027:  callvirt   instance bool System.String::Equals(string)
        //IL_002c:  brfalse.s  IL_0037

        //IL_002e:  ldarg.3
        //IL_002f:  ldc.r4     (00 00 80 7F)
        //IL_0034:  stind.r4
        //IL_0035:  br.s       IL_0067

        //IL_0037:  ldloc.1                                     
        //IL_0038:  ldarg.2
        //IL_0039:  callvirt   instance string System.Globalization.NumberFormatInfo::get_NegativeInfinitySymbol()
        //IL_003e:  callvirt   instance bool System.String::Equals(string)
        //IL_0043:  brfalse.s  IL_004e

        //IL_0045:  ldarg.3
        //IL_0046:  ldc.r4     (00 00 80 FF)
        //IL_004b:  stind.r4
        //IL_004c:  br.s       IL_0067

        //IL_004e:  ldloc.1
        //IL_004f:  ldarg.2
        //IL_0050:  callvirt   instance string System.Globalization.NumberFormatInfo::get_NaNSymbol()
        //IL_0055:  callvirt   instance bool System.String::Equals(string)
        //IL_005a:  brfalse.s  IL_0065

        //IL_005c:  ldarg.3
        //IL_005d:  ldc.r4     (00 00 C0 FF)
        //IL_0062:  stind.r4
        //IL_0063:  br.s       IL_0067

        //IL_0065:  ldc.i4.0
        //IL_0066:  ret

        //IL_0067:  ldc.i4.1
        //IL_0068:  ret
          bool V_0; 
          string V_1;
          if(s==null)
          {
              result=0.0f;
              return false;
          }
          else
          {
              V_0=System.Number.TryParseSingle(s,style,info,out result);
              if(V_0)
              {
                  return true;
              }
              else
              {
                  //IL_0019
                  V_1=s.Trim();
                  if(V_1.Equals(info.PositiveInfinitySymbol))
                  {
                      result=float.PositiveInfinity;                      
                  }
                  else if (V_1.Equals(info.NegativeInfinitySymbol))
                  {
                      result = float.NegativeInfinity;                      
                  }
                  else if (V_1.Equals(info.NaNSymbol))
                  {
                      result = float.NaN;                     
                  }
                  else
                  {
                      return false;
                  }
                  return true;
              }
          }


      }

      public new virtual sealed System.TypeCode GetTypeCode()
      {
        // 代码大小       3 (0x3)
        //.maxstack  8
        //IL_0000:  ldc.i4.s   13
        //IL_0002:  ret
          return TypeCode.Single;
      } 

      private new virtual sealed bool System.IConvertible.ToBoolean(System.IFormatProvider provider)
      {        
        // 代码大小       8 (0x8)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  call       bool System.Convert::ToBoolean(float32)
        //IL_0007:  ret
          return System.Convert.ToBoolean(this);
      } 

      private new virtual sealed char System.IConvertible.ToChar(System.IFormatProvider provider)
      {        
        // 代码大小       50 (0x32)
        //.maxstack  5
        //.locals init (object[] V_0)
        //IL_0000:  call       class System.Globalization.CultureInfo System.Globalization.CultureInfo::get_CurrentCulture()
        //IL_0005:  ldstr      "InvalidCast_FromTo"
        //IL_000a:  call       string System.Environment::GetResourceString(string)
        //IL_000f:  ldc.i4.2
        //IL_0010:  newarr     System.Object
        //IL_0015:  stloc.0
        //IL_0016:  ldloc.0
        //IL_0017:  ldc.i4.0
        //IL_0018:  ldstr      "Single"
        //IL_001d:  stelem.ref
        //IL_001e:  ldloc.0
        //IL_001f:  ldc.i4.1
        //IL_0020:  ldstr      "Char"
        //IL_0025:  stelem.ref
        //IL_0026:  ldloc.0
        //IL_0027:  call       string System.String::Format(class System.IFormatProvider,
        //                                                  string,
        //                                                  object[])
        //IL_002c:  newobj     instance void System.InvalidCastException::.ctor(string)
        //IL_0031:  throw
          object[] V_0;
          V_0 = new object[2]; 
          V_0[0] = "Single"; 
          V_0[1] = "Char";
          throw new System.InvalidCastException(string.Format(CultureInfo.CurrentCulture, System.Environment.GetResourceString("InvalidCast_FromTo"), V_0));
      }

      private new virtual sealed sbyte System.IConvertible.ToSByte(System.IFormatProvider provider)
      {        
        // 代码大小       8 (0x8)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  call       int8 System.Convert::ToSByte(float32)
        //IL_0007:  ret
          return System.Convert.ToSByte(this);
      }

      private new virtual sealed byte System.IConvertible.ToByte(System.IFormatProvider provider)
      {        
        // 代码大小       8 (0x8)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  call       uint8 System.Convert::ToByte(float32)
        //IL_0007:  ret
          return System.Convert.ToByte(this);
      }

      private virtual sealed short System.IConvertible.ToInt16(System.IFormatProvider provider)
      {        
        // 代码大小       8 (0x8)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  call       int16 System.Convert::ToInt16(float32)
        //IL_0007:  ret
          return System.Convert.ToInt16(this);
      }

      private new virtual sealed ushort System.IConvertible.ToUInt16(System.IFormatProvider provider)
      {        
        // 代码大小       8 (0x8)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  call       uint16 System.Convert::ToUInt16(float32)
        //IL_0007:  ret
          return System.Convert.ToUInt16(this);
      }

      private new virtual sealed int System.IConvertible.ToInt32(System.IFormatProvider provider)
      {        
        // 代码大小       8 (0x8)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  call       int32 System.Convert::ToInt32(float32)
        //IL_0007:  ret
          return System.Convert.ToInt32(this);
      }

      private new virtual sealed uint System.IConvertible.ToUInt32(System.IFormatProvider provider)
      {        
        // 代码大小       8 (0x8)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  call       uint32 System.Convert::ToUInt32(float32)
        //IL_0007:  ret
          return System.Convert.ToUInt32(this);
      }

      private new virtual sealed long System.IConvertible.ToInt64(System.IFormatProvider provider)
      {        
        // 代码大小       8 (0x8)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  call       int64 System.Convert::ToInt64(float32)
        //IL_0007:  ret
          return System.Convert.ToInt64(this);
      }

      private new virtual sealed ulong System.IConvertible.ToUInt64(System.IFormatProvider provider)
      {        
        // 代码大小       8 (0x8)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  call       uint64 System.Convert::ToUInt64(float32)
        //IL_0007:  ret
          return System.Convert.ToUInt64(this);
      }

      private new virtual sealed float System.IConvertible.ToSingle(System.IFormatProvider provider)
      {        
        // 代码大小       3 (0x3)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  ret
          return this;
      }

      private new virtual sealed double System.IConvertible.ToDouble(System.IFormatProvider provider)
      {        
        // 代码大小       8 (0x8)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  call       float64 System.Convert::ToDouble(float32)
        //IL_0007:  ret
          return System.Convert.ToDouble(this);
      }

      private new virtual sealed System.Decimal System.IConvertible.ToDecimal(System.IFormatProvider provider)
      {        
        // 代码大小       8 (0x8)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  call       valuetype System.Decimal System.Convert::ToDecimal(float32)
        //IL_0007:  ret
          return System.Convert.ToDecimal(this);
      }

      private new virtual sealed System.DateTime System.IConvertible.ToDateTime(System.IFormatProvider provider)
      {        
        // 代码大小       50 (0x32)
        //.maxstack  5
        //.locals init (object[] V_0)
        //IL_0000:  call       class System.Globalization.CultureInfo System.Globalization.CultureInfo::get_CurrentCulture()
        //IL_0005:  ldstr      "InvalidCast_FromTo"
        //IL_000a:  call       string System.Environment::GetResourceString(string)
        //IL_000f:  ldc.i4.2
        //IL_0010:  newarr     System.Object
        //IL_0015:  stloc.0
        //IL_0016:  ldloc.0
        //IL_0017:  ldc.i4.0
        //IL_0018:  ldstr      "Single"
        //IL_001d:  stelem.ref
        //IL_001e:  ldloc.0
        //IL_001f:  ldc.i4.1
        //IL_0020:  ldstr      "DateTime"
        //IL_0025:  stelem.ref
        //IL_0026:  ldloc.0
        //IL_0027:  call       string System.String::Format(class System.IFormatProvider,
        //                                                  string,
        //                                                  object[])
        //IL_002c:  newobj     instance void System.InvalidCastException::.ctor(string)
        //IL_0031:  throw
          object[] V_0;
          V_0 = new object[2];
          V_0[0] = "Single";
          V_0[1] = "DateTime";
          throw new System.InvalidCastException(string.Format(CultureInfo.CurrentCulture, System.Environment.GetResourceString("InvalidCast_FromTo"), V_0));
      }

      private new virtual sealed object System.IConvertible.ToType(System.Type @type,System.IFormatProvider provider)
      {        
        // 代码大小       15 (0xf)
        //.maxstack  8
        //IL_0000:  ldarg.0
        //IL_0001:  ldind.r4
        //IL_0002:  box        System.Single
        //IL_0007:  ldarg.1
        //IL_0008:  ldarg.2
        //IL_0009:  call       object System.Convert::DefaultToType(class System.IConvertible,
        //                                                          class System.Type,
        //                                                          class System.IFormatProvider)
        //IL_000e:  ret
          return System.Convert.DefaultToType((System.IConvertible)this,@type,provider);
      }

    }
}
posted @ 2010-08-28 21:18  Aegis  阅读(746)  评论(0编辑  收藏  举报