c#入门之类型转换详解

时间:2022-03-17 01:36:52 

“无论是什么类型,所有的数据都是一系列的位,即一系列0和1。变量的含义是通过解释这些数据的方式来传达的。”——这句原话是书上翻译的,不过后一句话总感觉理解起来不是很通俗,自己觉得这样理解可能会合适些:无论什么类型的数据,在计算机存储时都是0和1,而变量的意义,就是以不同的方式来解释这些数据,以达到满足程序应用、节约内存等需求。

换句话说:变量存在的意义,就是建立规(标)范(准)的数据存储方式。

隐式转换

类型转换分两种形式:隐式转换、显示转换。

隐式转换不需要单独的表达式,只需要把满足隐式转换条件的两个变量做相应的表达式操作即可,但隐式转换的结果可能并不是自己意料之中的:


ushort destinationVar;
char sourceVar = 'a';
destinationVar = sourceVar;
Console.WriteLine("sourceVar: {0}", sourceVar);
Console.WriteLine("destinationVar: {0}\n",destinationVar);

上面的输出结果,sourceVar的是a,而destinationVar虽然=sourceVar,但输出的结果是97。可以看出,虽然两种数据类型满足隐式转换的条件(存储的值范围),但不同的表达类型决定了最终的结果也不一样。另外,和大多数编程一样,隐式转换时,只要类型A的取值范围比类型B的范围小,就可以隐藏转换为B。

显示转换

在显示转换中,可以使用强制转换和Convert。

强制转换只在某些情况下可以,可能应用的场景不太丰富,当然,这个的确要方便一些,在变量前加上类似 (byte) 的代码就可以了:


byte destinationVar;
short sourceVar = 281;
destinationVar = (byte)sourceVar;
Console.WriteLine("sourceVar: {0}", sourceVar);
Console.WriteLine("destinationVar: {0}\n",destinationVar);

这个例子比较有意思,输出的结果是:sourceVar: 281, destinationVar: 25; 为什么不是变更为255?这就回到开头提到的了,其实转换过程中,丢掉的是数据存储的二进制位:
c#入门之类型转换详解

在转换的过程中,会把超过取值范围(255二进制位)的那个1丢掉,保留其它的位,所以最终结果是25,而不是255,也不是281。

Convert转换应该是常用的方式,因为它始终会进行溢出检查。

溢出检查配置

有些东西虽然没什么用,但是我们应该知道,否则出问题的时候就不知道怎么解决了。配置:解决方案资源管理器 - 右键 - 属性 - 生成 - 高级 - 检查运算上溢/下溢:

c#入门之类型转换详解

当然,对于强制转换可能需要这个配置,但使用Convert转换时始终会进行溢出检查的,所以这个配置和checked/unchecked就不起作用了。

结语

每次一看见那些数据类型、表达式的列表表格就头疼,因为根本记不住。就像哪些类型可以怎么转换成其它的类型的表格一样,其实个人感觉大可不必去记住这些,在实际做项目的过程中,只要记得有这方面的功能就行了,具体用哪一个,可以再回过头来翻书或google。

应该掌握的是:记住存在隐式转换,但这种方式应该尽量少用吧。而显示转换,方便的就直接用(),当然,最可靠的应该是Convert,因为在转换时,Convert始终都会进行溢出检查。

标签:c#,类型转换
0
投稿

猜你喜欢

  • JAVA中的基本数据类型

    2023-07-29 07:38:34
  • 解决VSCode调试react-native android项目错误问题

    2023-10-14 02:02:11
  • Java毕业设计实战之在线蛋糕销售商城的实现

    2022-06-06 14:25:39
  • Java实现简单的扫雷小程序

    2022-11-18 02:14:07
  • Java实现雪花算法的原理和实战教程

    2021-11-20 18:20:41
  • 深入解析C#中的泛型类与泛型接口

    2023-04-30 02:35:39
  • MediaPlayer音频与视频播放方法示例介绍

    2021-07-03 17:36:48
  • C#语音识别用法实例

    2021-09-11 01:16:47
  • Android实现控件拖动效果

    2021-11-05 09:02:31
  • C#迷你猜数实例分析

    2023-11-02 16:10:49
  • Android自定义scrollView实现顶部图片下拉放大

    2021-05-26 09:55:36
  • Android转场效果实现示例浅析

    2023-09-21 12:10:17
  • EditText监听方法,实时的判断输入多少字符

    2021-08-16 11:32:36
  • shiro整合springboot前后端分离

    2022-02-22 10:40:31
  • Android双向选择控件DoubleSeekBar使用详解

    2022-02-13 10:05:29
  • Android组件Glide实现图片平滑滚动效果

    2022-02-24 22:53:14
  • java中 String和StringBuffer的区别实例详解

    2023-06-19 18:48:31
  • Android实现清除单个域名的cookie

    2021-10-09 01:57:52
  • Kotlin基础学习之lambda中return语句详解

    2023-09-04 16:33:41
  • Java C++ 算法题解拓展leetcode670最大交换示例

    2022-05-18 23:31:51
  • asp之家 软件编程 m.aspxhome.com