C#中的类型转换

71e579630184b28033eab94c80431acd.png

前几篇文章中经常说到强制类型转换,就是可以将派生类对象强制转换为基类对象的做法或者通过as运算符进行的转换。

今天我们就来一起简单了解复习下在C#中都有哪些类型的转换。

要理解转换很容易,日常的开发编码过程中,由于变量类型的不同我们可能会根据业务的变更会进行变量值之间的转换。这里就会出现类型转换。比如Int型变量转换为String类型等等。

这里转换是接受一个类型的值并使用它作为另一个类型的等价值的过程,转换后的值应和源值一样。

如下就是典型的强制类型转换

short temp = 5;sbyte tempTwo = 20;tempTwo = (sbyte)temp;

类型转换

在进行数据转换的过程中,很多时候会存在数据精度丢失的问题,比如在和下位机进行通信的过程中,可能两者通过固定协议来传输和解析字段,这时候对于数据精度的关注就特别重要,不可出现转换不对的问题。

比如协议里面某字段要求是8字节的double类型,你在转换的过程中不能转换为4字节的float。

但是在进行转换的过程中有些类型就不会丢失数据和精度,比如将8位的值转换为16位值数据。这就是所谓的隐式转换。语言在使用过程中,编译器会自动进行转换。

当从位数更少的源转换为位数更多的目标类型时,目标中多出来的位需要用0或1填充;当从更小的无符号类型转换为更大的无符号类型时,目标类型多出来的最高位都以0进行填充,也就是所谓的零扩展。对于有符号的类型的转换而言,额外的高位用源表达式的符号位进行填充。

这里既然有隐式转换和强制类型转换,那么也就会有显示转换。比如我们想将短类型转换为长类型,在长类型里面很容易放下短类型的值,但是如果反过来,这里就会出现问题。在短类型中,无法放下所有长类型的内容,就会出现数据或精度的丢失。

下面是C#中各个类型的字节长度

1)   bool, System.Boolean 类型,它用于声明变量来存储布尔值 true 和 false。
2)   sbyte, System.SByte 类型,最小值为-128,最大值为127,可显示转换为 int、long、double、float、decimal 类型。
3)   byte, System.Byte 类型,最小值为0,最大值为255,可显示转换为 int、long、double、float、decimal 类型。
4)   short, System.Int16 类型,最小值为-32768,最大值为32767,可显示转换为 int、long、double、float、decimal 类型。
5)   ushort, System.UInt16 类型,最小值为0,最大值为65535,可显示转换为 int、long、double、decimal、float 类型。
6)   int, System.Int32 类型,最小值为-2147483648,最大值为2147483647;可显示转换为 long、double、decimal、float 类型。
7)   uint, System.UInt32 类型,最小值为0,最大值为4294967295,声明 uint 类型变量使用后缀 u或U,可显示转换为 long、double、decimal、float 类型。
8)   long, System.Int64 类型,最小值为-9223372036854775808,最大值为9223372036854775807L,声明 long 类型变量使用后缀 l或L,可显示转换为 double、decimal、float 类型。
9)   ulong, System.UInt64 类型的最小值为0,最大值为18446744073709551615,声明 long 类型变量使用后缀 ul或UL,可显示转转为 double、decimal、float 类型。
10)  float, System.Singe 类型,最小值为-3.4 × 1038,最大值为+3.4 × 1038,表示存储32位浮点值的简单类型,声明 float 类型变量使用后缀 f或F,可显示转换为 double 类型,转为 int、long、decimal 类型,需隐式转换。
11)  double, System.Double 类型,最小值为±5.0 × 10−324,最大值为±1.7 × 10308,表示存储64位浮点值的简单类型,声明 double 类型变量使用后缀 d或D;换为 int、long、float、decimal 类型,需隐式转换。
12)  decimal, System.Decimal 类型的大致范围(-7.9 x 1028 - 7.9 x 1028) / (100 - 28),表示128位数据类型,同浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算,声明 decimal 类型变量使用后缀 m或M,转为 int、long、double、float 类型,需隐式转换。
13)  char, System.Char 类型范围(U+0000 到 U+FFFF),用于声明 .NET framework 使用Unicode字符表示 System.Char 结构的实例;可显示转换为 short、int、long、float、double、decimal 类型。转为 string 类型,需使用 ToString() 方法。
14)  enum, System.Enum 类型,一种由一组称为枚举数列表的命名常量组成的独特类型。
15)  struct 类型,通常用来封装小型相关变量组,例如:矩形的坐标或库存商品的特征。

在C#中会经常使用Convert类下的方法进行类型之间的转换工作。216d6696ed682f1d0016fdb40a61caaa.png

int ahui=27;string age = Convert.ToString(ahui);double ageTwo = Convert.ToDouble(ahui);Single ageThree=Convert.ToSingle(ahui);

隐式引用转换

  • 所有引用类型可以被隐式转换为object类型

  • 任何类型可以隐式转换到它继承的接口

  • 类可以隐式转换到继承链的任何类或它实现的任何接口

显示引用转换

  • 从object到任何引用类型的转换

  • 从基类到从它继承的类的转换

装箱和拆箱

装箱:指在C#的转换过程中值类型到引用类型的转换过程称为装箱。

拆箱:指将装箱后的对象(引用类型)转换到值类型的过程。

装箱是一种隐式转换,它接受值类型的值,根据这个值在堆上创建一个完整的引用类型对象并返回对象引用。

//int 为值类型;  string为引用类型 
int ahui;
string age;ahui=27;                           
//装箱操作
age = Convert.ToString(ahui);      
//拆箱操作
ahui = Convert.ToInt32(age);

寄语

人生短暂,我不想去追求自己看不见的,我只想抓住我能看得见的。

原创不易,给个关注。

我是阿辉,感谢您的阅读,如果对你有帮助,麻烦点赞、转发  谢谢。

4aa07be432ce0133f024d068c3508383.png

往期推荐

C#中的协变和逆变

C#中泛型约束的具体用法

C#中泛型的用法

C#中的泛型

a18d8d7ead192a02cd6e1f2e9c6f4345.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux之快速过滤文本的关键字以及快速过滤目录下的关键字

1、快速过过滤文本的关键字 cat file | grep 关键字 比如Android日志文件很长,需要过滤Exception,就可以用这个办法,如下图 2、快速过滤目录下的关键字 grep -r 关键字 比如我们在linux上看目录下哪些关键字段,好像开发工具里面的 find usag…

hadoop使用

2019独角兽企业重金招聘Python工程师标准>>> 框架简介 Hadoop使用主/从(Master/Slave)架构,主要角色有NameNode,DataNode,secondary NameNode,JobTracker,TaskTracker组成。 其中Nam…

bigint hive java类型_详解Apache Hudi如何配置各种类型分区

1. 引入Apache Hudi支持多种分区方式数据集,如多级分区、单分区、时间日期分区、无分区数据集等,用户可根据实际需求选择合适的分区方式,下面来详细了解Hudi如何配置何种类型分区。2. 分区处理为说明Hudi对不同分区类型的处理,假定…

C#中的命名空间和程序集

前言今天这篇文章和大家一起学习下C#语言下的命名空间和程序集。在日常的编码工作中,我们对命名空间和程序集都不会很陌生。在创建项目文件时,IDE自动会为我们创建好一个大的命名空间和程序集。大多数业务代码都是在解决方案下各自的命令空间里进行编码的…

基于jQuery的ajax系列之用FormData实现页面无刷新上传

接着上一篇ajax系列之用jQuery的ajax方法向服务器发出get和post请求写,这篇主要写如何利用ajax和FormData实现页面无刷新的文件上传效果,主要用到了jQuery的ajax()方法和XMLHttpRequest Level 2的FormData接口。关于FormData,大家可以看MDN文…

abd shell关闭所有程序_在后台服务器上运行程序

之前总结过screen的用法,但还可以用nohup命令。nohup工具:Linux系统中有提供一个很好的不挂断地运行命令——nohup。我们使用nohup能很简单的控制使用,在此就简单的介绍一下nohup工具。nohup 命令nohup就是不挂起的意思( no hang up)。用途&a…

解锁JDK 12的奇妙之旅:新特性详解

欢迎来到我的博客,代码的世界里,每一行都是一个故事 解锁JDK 12的奇妙之旅:新特性详解 前言switch表达式拓展NumberFormat对复杂数字的格式化字符串支持transform、indent操作新增方法Files.mismatch(Path, Path)Teeing Collector支持unicode…

.NET6之MiniAPI(十四):跨域CORS(上)

为了说明跨请求,创建了两个项目,一个mini api,端口是5001,另一个razor page项目,端口是5280。5280项目会在页面用ajax的方式来请求5001,形成跨域请求,由于是本地测试,host都是localh…

django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct

2019独角兽企业重金招聘Python工程师标准>>> 1.多表连接查询:当我知道这点的时候顿时觉得django太NX了。 class A(models.Model): name models.CharField(u名称) class B(models.Model): aa models.ForeignKey(A)B.objects.filter(aa__name__c…

利用tabluea分析数据的案例_利用德温特分析Dartsip的案例检索结果

德温特创新平台(Derwent Innovation)与Darts-ip知识产权案例数据库均是科睿唯安旗下的知识产权数据库,虽然这两个数据库的侧重点分别在于专利信息与知识产权判例,但若将两者结合使用则能发挥11>2的作用,打通专利全生命周期。关注我们的朋友…

linux网络编程之怎么配置好unp.h文件

1、获取unp源码 下载地址:http://www.unpbook.com/src.html 然后用tar -zxvf unpv13e.tar.gz命令解压 2、进入unpv13e目录执行configure cd unpv13e ,然后执configure文件 3、打开README文件,使用make命令 打开README文件

客户端禁用Keep-Alive, 服务端开启Keep-Alive,会怎么样?

最近部署的web程序,服务器上出现不少time_wait的tcp连接状态,占用了tcp端口,花费几天时间排查。之前我有结论:HTTP keep-alive 是在应用层对TCP连接的滑动续约复用,如果客户端、服务器稳定续约,就成了名副其…

linux网络编程之一般应用采用的协议和不同套接字的地址结构以及用户进程和内核通过哪些函数传递套接字的地址结构

1、一般应用采用的协议 2、不同套接字的地址结构 3、用户进程和内核通过哪些函数传递套接字的地址结构 从进程到内核传递套接字的地址结构函数有3个 bind、connect、sendto函数 从内核到进程传递套接字的地址结构函数有4个函数 accept、recvfrom 、getsockname 、getpeername…

四则运算2测试

这是测试程序在输入任意字符时能否正常运行 1)按程序提示正确输入 结果无错 2)当输入错误的字符,如字母等,程序出错(错误提示无限循环) 这一错误我经过长时间反正为解决,于是请教了其他同学,发现…

2020-11-04关于出现tomcat启动失败的一种原因

点击run on server后出现了如下所示: 本来是运行正常的,后来因为我将exp5里面所有的文件都复制了一遍,放到了exp5_2里面后,如下所示: 此时(复制文件夹之前)若tomcat已经启动,则不会出…

HTTP协议快速入门

一、定义 The Hypertext Transfer Protocol (HTTP) is an application protocol for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web. Hypertext is structured text that uses logical l…

删除含有关键词的文件_AweEraser——macOS Catalina最佳的文件粉碎机

您是否正在寻找适用于macOS Catalina的好的文件粉碎机?今天macdown为大家推荐一种永久删除数据的软件——AweEraser。有时,你要销毁或擦除计算机上的所有私人文件,这意味着这些数据必须受到保护,免受他人的侵害。本地硬盘或外部硬…

linux网络编程之用一张图片说明函数inet_ntop、inet_pton、inet_addr、inet_ntoa 、inet_aton函数之间的关系

1、inet_ntop、inet_pton、inet_addr、inet_ntoa 、inet_aton函数之间的关系 2、inet_ntop、inet_pton函数的源代码 1、inet_pton函数源码 int inet_pton(int family, const char *strptr, void *addrptr) {if (family == AF_INET) {struct in_addr in_val;if (inet_aton(s…

聊一聊如何用C#轻松完成一个TCC分布式事务

背景 银行跨行转账业务是一个典型分布式事务场景,假设 A 需要跨行转账给 B,那么就涉及两个银行的数据,无法通过一个数据库的本地事务保证转账的 ACID ,只能够通过分布式事务来解决。在 聊一聊如何用C#轻松完成一个SAGA分布式事务…