C# 类型




 


.NET Framework 类型



bool




 


System.Boolean



byte




 


System.Byte



sbyte




 


System.SByte



char




 


System.Char



decimal




 


System.Decimal



double




 


System.Double



float




 


System.Single



int




 


System.Int32



uint




 


System.UInt32



long




 


System.Int64



ulong




 


System.UInt64



object




 


System.Object



short




 


System.Int16



ushort




 


System.UInt16



string




 


System.String




 


 

请记住:在 C# 中不允许使用未初始化的变量。

值类型



默认值



bool



false



byte



0



char



'\0'



decimal



0.0M



double



0.0D



enum



表达式 (E)0 产生的值,其中 E 为 enum 标识符。



float



0.0F



int



0



long



0L



sbyte



0



short



0



struct



将所有的值类型字段设置为默认值并将所有的引用类型字段设置为 null 时产生的值。



uint



0



ulong



0



ushort



0




 

下表显示了整型的大小和范围,这些类型构成了简单类型的一个子集。

类型



范围



大小



sbyte



-128 到 127



有符号 8 位整数



byte



0 到 255



无符号 8 位整数



char



U+0000 到 U+ffff



16 位 Unicode 字符



short



-32,768 到 32,767



有符号 16 位整数



ushort



0 到 65,535



无符号 16 位整数



int



-2,147,483,648 到 2,147,483,647



有符号 32 位整数



uint



0 到 4,294,967,295



无符号 32 位整数



long



-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807



有符号 64 位整数



ulong



0 到 18,446,744,073,709,551,615



无符号 64 位整数



如果整数表示的值超出了 ulong 的范围,将产生编译错误。

浮点型表(C# 参考)

下表显示了浮点型的精度和大致范围。

类型



大致范围



精度



float



±1.5e−45 到 ±3.4e38



7 位



double



±5.0e−324 到 ±1.7e308



15 到 16 位




 

隐式数值转换表(C# 参考)

下表显示了预定义的隐式数值转换。隐式转换可能在多种情形下发生,包括调用方法时和在赋值语句中。





sbyte



short、int、long、float、double 或decimal



byte



short、ushort、int、uint、long、ulong、float、double 或decimal



short



int、long、float、double 或decimal



ushort



int、uint、long、ulong、float、double 或decimal



int



long、float、double 或decimal



uint



long、ulong、float、double 或decimal



long



float、double 或decimal



char



ushort、int、 uint、 long、ulong、 float、double 或decimal



float



double



ulong



float、 double 或decimal



<!--[if !vml]--><!--[endif]--> 备注

  • 从int、uint 或long 到float 的转换以及从long 到double 的转换的精度可能会降低,但数值大小不受影响。
  • 不存在到char 类型的隐式转换。
  • 不存在浮点型与decimal 类型之间的隐式转换。
  • int 类型的常数表达式可转换为sbyte、byte、short、ushort、uint 或ulong,前提是常数表达式的值处于目标类型的范围之内。

显式数值转换表(C# 参考)

显式数值转换用于通过显式转换表达式,将任何数字类型转换为任何其他数字类型。对于它不存在隐式转换。下表显示了这些转换。





sbyte



byte、ushort、uint、ulong 或char



byte



Sbyte 或者char



short



sbyte、 byte、 ushort、 uint、 ulong 或char



ushort



sbyte、 byte、 short 或char



int



sbyte、byte、 short、 ushort、 uint、 ulong 或char



uint



sbyte、byte、 short、 ushort、 int 或char



long



sbyte、 byte、 short、 ushort、 int、 uint、 ulong 或char



ulong



sbyte、 byte、 short、 ushort、 int、 uint、 long 或char



char



sbyte、byte 或short



float



sbyte、 byte、 short、 ushort int、 uint、 long、 ulong、 char 或decimal



double



sbyte、 byte、 short、 ushort、 int、 uint、 long、 ulong、 char、 float 或decimal



decimal



sbyte、 byte、 short、 ushort、 int、 uint、 long、 ulong、 char、 float 或double



 备注

  • 显式数值转换可能导致精度损失或引发异常。
  • 将decimal 值转换为整型时,该值将舍入为与零最接近的整数值。如果结果整数值超出目标类型的范围,则会引发OverflowException
  • 将double 或float 值转换为整型时,值会被截断。如果该结果整数值超出了目标值的范围,其结果将取决于溢出检查上下文。在 checked 上下文中,将引发OverflowException;而在 unchecked 上下文中,结果将是一个未指定的目标类型的值。
  • 将double 转换为float 时,double 值将舍入为最接近的float 值。如果double 值因过小或过大而使目标类型无法容纳它,则结果将为零或无穷大。
  • 将float 或double 转换为decimal 时,源值将转换为decimal 表示形式,并舍入为第 28 个小数位之后最接近的数(如果需要)。根据源值的不同,可能产生以下结果:
  • 如果源值因过小而无法表示为decimal,那么结果将为零。
  • 如果源值为 NaN(非数字值)、无穷大或因过大而无法表示为decimal,则会引发OverflowException。
  • 将decimal 转换为float 或double 时,decimal 值将舍入为最接近的double 或float 值。