http://dev.csdn.net/develop/article/35/35983.shtm

解决方案 »

  1.   

    每种类型都有一个相关值,该值由存储在内存中的字节构成。值从同样已类型化的内存位置中读取。位置的类型决定值的类型。许多值可以表示为多种类型。例如,值 4 可以表示为整数或浮点值。转换可创建等同于旧类型值的新类型值,但却不必使两个对象保持恒等(或精确值)。除了支持显式转换,.NET Framework 还提供了几种方法,用于在 System.Convert 类中的类型间转换。公共语言运行库同时支持扩大转换和收缩转换。例如,表示为 32 位带符号整数的值可转换为 64 位的带符号整数。这是一个扩大转换的示例。相反的转换(从 64 位转换为 32 位)是收缩转换的示例。执行扩大转换,信息永远不会丢失,而在收缩转换过程中,则会丢失信息。有关安全扩大转换的列表,请参见类型转换表。下面的代码示例显示了扩大转换,其中 Int32 值 MyInt 转换为 Int64 值。这种转换是隐式完成,不使用 System.Convert 类。
    参见:
    int MyInt = int.MaxValue;
    byte MyByte = (byte)Myint;string MyString = "true";
    bool MyBool = Convert.ToBoolean(MyString);
    一个表如下:
    下表描述了可安全执行且不丢失信息的扩大转换。类型     可安全转换为 
    Byte     UInt16、Int16、UInt32、Int32、UInt64、Int64、Single、Double、Decimal 
    SByte    Int16、Int32、Int64、Single、Double、Decimal 
    Int16    Int32、Int64、Single、Double、Decimal 
    UInt16   UInt32、Int32、UInt64、Int64、Single、Double、Decimal 
    Char     UInt16、UInt32、Int32、UInt64、Int64、Single、Double、Decimal 
    Int32    Int64、Double、Decimal 
    UInt32   Int64、Double、Decimal 
    Int64    Decimal 
    UInt64   Decimal 
    Single   Double 一些目标为 Single 或 Double 的扩大转换可能会导致丢失精度。下面的表格描述了有时会导致信息丢失的扩大转换。类型     可转换为 
    Int32    Single 
    UInt32   Single 
    Int64    Single、Double 
    UInt64   Single、Double 
    Decimal  Single、Double 类型     可转换为 
    Byte     Sbyte 
    SByte    Byte、UInt16、UInt32、UInt64 
    Int16    Byte、Sbyte、UInt16 
    UInt16   Byte、Sbyte、Int16 
    Int32    Byte、Sbyte、Int16、UInt16、Int32 
    UInt32   Byte、Sbyte、Int16、UInt16、Int32 
    Int64    Byte、SByte、Int16、UInt16、Int32、UInt32、UInt64 
    UInt64   Byte、SByte、Int16、UInt16、Int32、UInt32、Int64 
    Decimal  Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64 
    Single   Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64 
    Double   Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64