C#类型转换

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#类型转换相关的知识,希望对你有一定的参考价值。

      类型转换就是将一种类型转换成另一种类型,转换可以是隐式转换或者显式转换,下面将详细介绍这两种转换方式,并讲解有关装箱和拆箱的内容。

01

隐式转换

       所谓隐式转换就是不需要声明就能进行的转换。进行隐式转换时,编译器不需要进行检查就能安全地进行转换。表 1 列出了可以进行隐式转换的数据类型。

表1  隐式类型转换表

       从 int、uint、long 或 ulong 到 float,以及从 long 或 ulong 到 double 的转换可能导致精度损失,但是不会影响其数量级,其他的隐式转换不会丢失任何信息。

      说明 当一种类型的值转换为大小相等或更大的另一类型时,则发生扩大转换;当一种类型的值转换为较小的另一种类型时,则发生收缩转换。

【例 1】将int 类型的值隐式转换成 long 类型。

代码如下:

int i= 927;       //声明一个整型变量i并初始化为 927
 long j=i;        //隐式转换成long 类型

02

显示转换

       显式转换也可以称为强制转换,需要在代码中明确地声明要转换的类型。如果要在不存在隐式转换的类型之间进行转换,就需要使用显式转换。表 2 列出了需要进行显式转换的数据类型。

表2  显式类型转换表

       由于显式转换包括所有隐式转换和显式转换,因此总是可以使用强制转换表达式从任何数值类型转换为任何其他的数值类型。

【例 2】 创建一个控制台应用程序,将 double 类型的x进行显式类型转换。

代码如下:

static void Main(string[] args)
{
double x=19810927.0112;         //建立double类型变量x
int y=(int)x;                  //显式转换成整型变量y
Console.WriteLine(y);          //输出整型变量y
Console.ReadLine();
}

程序运行结果为 19810927。

也可以通过 Convert 关键字进行显式类型转换,上述例子还可以通过下面的代码实现。

【例 3】 创建一个控制台应用程序,通过 Convert 关键字进行显式类型转换。代码如下:

double x= 19810927.0112;        //建立double类型变量 x
int y=Convert.ToInt32(x);      //通过Convert关键字转换
Console.WriteLine(y);          //输出整型变量y
Console.ReadLine();

03

装箱和拆箱

       将值类型转换为引用类型的过程叫做装箱,相反,将引用类型转换为值类型的过程叫做拆箱。

(1)装箱

       装箱允许将值类型隐式转换成引用类型,下面通过一个实例演示如何进行装箱操作。

【例 4】 创建一个控制台应用程序,声明一个整型变量 i 并赋值为 2008。然后将其复制到装箱对象 obj 中,最后再改变变量 i 的值。

代码如下:

static void Main(string[] args)
{
int i=2008;       //声明一个int类型变量i,并初始化为2008
object obj=i;    //声明一个object类型 obj,其初始化值为i
Console.WriteLine("1.i的值为{0},装箱之后的对象为{1}",i,obj);
i=927;            //重新将i赋值为 927
Console.WriteLine("2.i的值为{0},装箱之后的对象为{1}",i,obj);
Console.ReadLine();
}

程序的运行结果为:

1. i 的值为2008,装箱之后的对象为 2008

2. i 的值为 927,装箱之后的对象为 2008

       从程序运行结果可以看出,将值类型变量的值复制到装箱得到的对象中,装箱后改变值类型变量的值,并不会影响装箱对象的值。

(2)拆箱

       拆箱允许将引用类型显式转换为值类型,下面通过一个实例演示拆箱的过程。

【例 5】创建一个控制台应用程序,声明一个整型变量 i 并赋值为 112。然后将其复制到装箱对象 obj 中。最后进行拆箱操作,将装箱对象 obj 赋值给整型变量 j。

代码如下:

static void Main(string[] args)
{
int i=112;        //声明一个int类型的变量i,并初始化为 112
object obj=i;     //执行装箱操作
Console.WriteLine("装箱操作:值为{0},装箱之后对象为{1}",1,obj);
int j=(int)obj;      //执行拆箱操作
Console.WriteLine("拆箱操作:装箱对象为{0},值为{1}",obj,j);
Console.ReadLine();
}

程序运行结果为:

装箱操作: 值为 112,装箱之后对象为 112

拆箱操作: 装箱对象为112,值为 112

      查看程序运行结果不难看出,拆箱后得到的值类型数据的值与装箱对象相等。需要注意的是,在执行拆箱操作时,要符合类型一致的原则,否则会出现异常。

说明 装箱是将一个值类型转换为一个对象类型(object),而拆箱则是将一个对象类型显式转换为一个值类型。对于装箱而言,它是将被装箱的值类型复制一个副本来转换;而对于拆箱而言,需要注意类型的兼容性,例如,不能将一个值为“string”的 object 类型转换为 int类型。

以上是关于C#类型转换的主要内容,如果未能解决你的问题,请参考以下文章

C# 最有用的(自定义)代码片段是啥? [关闭]

c#代码片段快速构建代码

此 Canon SDK C++ 代码片段的等效 C# 代码是啥?

(61)C#里怎么样转换字节数组与int类型

(61)C#里怎么样转换字节数组与int类型

是否可以动态编译和执行 C# 代码片段?