C#转换概叙

Posted 是小叶的呢.

tags:

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

本次分享的内容如下:
1、 什么是转换
2、 隐式转换
3、 显示转换和强制转换
4、 转换的类型
5、 数字的转换

一、 什么是转换?
要理解什么是转换,让我们先从声明两个不同类型的变量,然后把一个变量的值赋值给另外一个变量。再赋值之前,源的值必须转换成目标类型的值。如下图演示了类型的转换。
在这里插入图片描述

📌转换是接受一个类型的值并使用它作为另一个类型的等价值的过程。
📌转换后的值应和源值一样的,但其类型为目标类型。
如下图所示
在这里插入图片描述

📌var1是short类型的16位有符号整数,初始值为5.var2是sbyte类型的8位有符号整数,初始值为10.
📌第三行代码把var1赋值给var2。由于他们是两种不同的类型,在进行赋值前,var1的值必须先转换为与var2类型相同的值类型。这将通过强制转换表达式来实现,稍后我们就会看到。
📌还要注意,var1的类型和值都没有改变。尽管称之为转换,但只是代表源值作为目标类型来使用,不是源值转换为目标类型。

二、 隐式转换
📌有些类型的转换不会丢失数据或精度。例如,将8位的值转换为16位是非常容易的,而且不会丢失数据。
📌语言会自动做这些转换,这叫做隐式转换。
📌从位数更少的源转换为位数更多的目标类型时,目标中多出来的为需要用0或者1填充。
📌当从更小的无符号类型为更大的无符号类型时,目标类型多出来的最高位都以0进行填充,这叫做零扩展。如下图演示了使用零扩展把8位转换为16位的10。
在这里插入图片描述

📌这样就维持了被转换的值正确符号和大小。
三、 显示转换和强制转换
如果要把短类型转换为长类型。对于长类型来说,保存所有短类型的字符很简单 。然而,在其他情况下,目标类型也许无法在不损坏数据的情况下提供源值。
例如,假设我们希望把ushort值转化为byte。
📌ushort可以保存任何0~65 535之间的值。
📌byte只能保存0~255之间的值。
📌只要希望转换的ushort值小于256,那么就不会损失数据。然而,如果更大,最高位的数据会丢失。
📌例如,如下图演示了尝试把值为1365的ushort类型转换为byte类型会导致数据丢失。不是所有源值的最高位都适合目标类型,会导致溢出或数据丢失。源值时1365,而且目标的最大值只能是255.最终字节中的结果值为85,而不是1365.
在这里插入图片描述

很明显,只有当无符号16位ushort的值是一个相对于小一些的数字(0.4%)时,才能在不损失数据的情况下安全转换为无符号8位布特类型。数据中的其他结果会溢出,产生其他值。
强制转换
对于与定义的类型,C#会自动将一个数据类型转换为另一个数据另一个数据类型,但只是针对那些从原类型到目标类型不会发生数据丢失的情况。也就是说,对于原类型的任意值在被转换成目标类型时会丢失值的情况,语言是不会提供这两种类型的自动转换的。如果希望对这样的类型进行转换,就必须使用显示转换。这叫做强制转换表达式。
如下图所示。它把var1的值转换为byte类型。强制转换表达式。
在这里插入图片描述

📌一对圆括号,里面是目标类型。
📌圆括号后是源表达式。
如果我们使用强制转换表达式,就意味着要承担执行操作可能引起的丢失数据的后果。它从本质上是在说:“不管是否发生数据丢失,我知道在做什么,总之进行转换吧。”
例如,如下图所示演示了强制转换表达式将两个ushort类型的值转换为byte类型,对于第一种情况,没有数据丢失。对于第二种情况,最高位丢失了,得到的值是85,很明显不等于源值1365.
在这里插入图片描述

四、 转换的类型
有很多标准的、预定义的用于数字和引用类型的转换。如下图所示这些不同的转换类型。
在这里插入图片描述

📌处理标准转换 ,还可以为自定义隐式转换和显示转换。
📌还有一个预定义的转换类型,叫做装箱,可以将任何值类型转换为:object类型和System.ValueType类型。
📌拆箱可以将一个装箱的值转换为原始类型。
五、 数字转换
任何数字类型都可以转换为其他数字类型,如下图所示。一些转换是隐式的,而另外一些转换则必须是=显示的。
在这里插入图片描述

六、隐式数字转换
📌如果有路径,从源类型到目标类型可以按照箭头进行隐式转换。
📌任何在从在原类型到目标类型的箭头方向上没有路径的数字转换都必须是显示转换。
📌如下图所示,正如我们期望的那样,占据较少位的数字类型可以隐式转换为占据较多位的数字类型。如下图所示。

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

Java基础概叙

C# 类型转换

RxJava概叙

ogg概叙架构进程

《C#零基础入门之百识百例》(八十)类型转换汇总 -- 数字转换/引用转换/ 装箱拆箱

C#中的类型转换