C# 类型转换

在 C# 中,类型转换是将一个数据类型的值转换为另一个数据类型的过程。

C# 中的类型转换可以分为两种:隐式类型转换和显式类型转换(也称为强制类型转换)。

隐式类型转换

隐式转换是指将一个较小范围的数据类型转换为较大范围的数据类型时,编译器会自动完成类型转换,这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。

例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。将一个 byte 类型的变量赋值给 int 类型的变量,编译器会自动将 byte 类型转换为 int 类型,不需要显示转换。

实例

byte b = 10 ;
int i = b ; // 隐式转换,不需要显式转换

将一个整数赋值给一个长整数,或者将一个浮点数赋值给一个双精度浮点数,这种转换不会导致数据丢失:

实例

int intValue = 42 ;
long longValue = intValue ; // 隐式转换,从 int 到 long

显式转换

显式类型转换,即强制类型转换。

显式转换是指将一个较大范围的数据类型转换为较小范围的数据类型时,或者将一个对象类型转换为另一个对象类型时,需要使用强制类型转换符号进行显示转换,强制转换会造成数据丢失。

例如,将一个 int 类型的变量赋值给 byte 类型的变量,需要显示转换。

实例

int i = 10 ;
byte b = ( byte ) i ; // 显式转换,需要使用强制类型转换符号

强制转换为整数类型:

实例

double doubleValue = 3.14 ;
int intValue = ( int ) doubleValue ; // 强制从 double 到 int,数据可能损失小数部分

强制转换为浮点数类型:

实例

int intValue = 42 ;
float floatValue = ( float ) intValue ; // 强制从 int 到 float,数据可能损失精度

强制转换为字符串类型:

实例

int intValue = 123 ;
string stringValue = intValue . ToString ( ) ; // 将 int 转换为字符串

下面的实例显示了一个显式的类型转换:

实例

using System ;

namespace TypeConversionApplication
{
    class ExplicitConversion
    {
        static void Main ( string [ ] args )
        {
            double d = 5673.74 ;
            int i ;

            // 强制转换 double 为 int
            i = ( int ) d ;
            Console . WriteLine ( i ) ;
            Console . ReadKey ( ) ;
           
        }
    }
}

当上面的代码被编译和执行时,它会产生下列结果:

									5673
								

C# 类型转换方法

C# 提供了下列内置的类型转换方法:

序号 方法 & 描述
1 ToBoolean
如果可能的话,把类型转换为布尔型。
2 ToByte
把类型转换为字节类型。
3 ToChar
如果可能的话,把类型转换为单个 Unicode 字符类型。
4 ToDateTime
把类型(整数或字符串类型)转换为 日期-时间 结构。
5 ToDecimal
把浮点型或整数类型转换为十进制类型。
6 ToDouble
把类型转换为双精度浮点型。
7 ToInt16
把类型转换为 16 位整数类型。
8 ToInt32
把类型转换为 32 位整数类型。
9 ToInt64
把类型转换为 64 位整数类型。
10 ToSbyte
把类型转换为有符号字节类型。
11 ToSingle
把类型转换为小浮点数类型。
12 ToString
把类型转换为字符串类型。
13 ToType
把类型转换为指定类型。
14 ToUInt16
把类型转换为 16 位无符号整数类型。
15 ToUInt32
把类型转换为 32 位无符号整数类型。
16 ToUInt64
把类型转换为 64 位无符号整数类型。

下面的实例把不同值的类型转换为字符串类型:

实例

namespace TypeConversionApplication
{
    class StringConversion
    {
        static void Main ( string [ ] args )
        {
            int i = 75 ;
            float f = 53 . 005f ;
            double d = 2345.7652 ;
            bool b = true ;

            Console . WriteLine ( i . ToString ( ) ) ;
            Console . WriteLine ( f . ToString ( ) ) ;
            Console . WriteLine ( d . ToString ( ) ) ;
            Console . WriteLine ( b . ToString ( ) ) ;
            Console . ReadKey ( ) ;
           
        }
    }
}

当上面的代码被编译和执行时,它会产生下列结果:

								75
53.005
2345.7652
True
							

在进行类型转换时需要注意以下几点:

  • 隐式转换只能将较小范围的数据类型转换为较大范围的数据类型,不能将较大范围的数据类型转换为较小范围的数据类型;
  • 显式转换可能会导致数据丢失或精度降低,需要进行数据类型的兼容性检查;
  • 对于对象类型的转换,需要进行类型转换的兼容性检查和类型转换的安全性检查。