C#中的类型转换

简介: C#中的类型转换

前言


前几篇文章中经常说到强制类型转换,就是可以将派生类对象强制转换为基类对象的做法或者通过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类下的方法进行类型之间的转换工作。


 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);         


目录
相关文章
|
3月前
|
开发框架 安全 .NET
全面掌握C#中的类型转换:详解与实践
【8月更文挑战第20天】
147 0
C#基础③——类型转换(int转double、double转int、Convert)
不同数据类型间的转换,如:将int类型转换为string类型
|
安全 C#
C#类型转换
C#类型转换
51 0
|
6月前
|
存储 C#
C# 数据类型与类型转换:包含教程与示例
使用正确的数据类型对应于相应的变量是重要的;这样可以避免错误、节省时间和内存,还会使您的代码更易于维护和阅读。最常见的数据类型有:
62 0
|
C#
C#中 Int32.TryParse() ConVert.ToInt32() Int32.Parse () 的区别 将字符串类型转换为数字类型
C#中 Int32.TryParse() ConVert.ToInt32() Int32.Parse () 的区别 将字符串类型转换为数字类型
60 0
|
C# C++ Windows
C#工程中输出类型转换以及程序运行后控制台窗口不退出设置
C#工程中输出类型转换以及程序运行后控制台窗口不退出设置
381 0
C#工程中输出类型转换以及程序运行后控制台窗口不退出设置
|
存储 人工智能 C#
C# 类型转换
但是当大范围转小范围,或者是高精度转低精度的时候,就要考虑范围和精度的问题了。前提是输入的字符串要能够直接转换成对应类型的值,而且要符合目标的存储范围。上面的两种方法常用于数值之间的转换和字符串转换,我们还可以使用。可以实现更加精确的转换,同时,适用的变量类型也更多。是将一个类型的值手动转换成目标类型的转换方式。如果是其他类型转换成字符串则更加简单,只需要使用。类型的变量,这里面就发生了隐式转换。则是不同变量类型之间的自动转换。即不同变量类型之间的相互转换。除此之外,我们还可以通过。类型的变量也可以存储。
98 0
C# 类型转换
|
存储 安全 编译器
☀️ 学会编程入门必备 C# 最基础知识介绍(二)——进制、原码反码、基本语法、数据类型、类型转换
C#🔥 基础知识🎓 进制🙉 原码反码补码🙈 基本语法🙊 using 关键字 👂 class 关键字👀 C# 中的注释❄️ 成员变量👥 成员函数👤 实例化一个类💬 标识符⚡️ C# 关键字☀️ 数据类型🎈 值类型(Value types)🐶 引用类型(Reference types)🐱 对象(Object)类型🐸 动态(Dynamic)类型🐨 字符串(String)类型🐯 指针类型(Pointer types)🐷 类型转换🎅 隐式类型转换🎄 显式类型转换🎁 C# 类型转换方法🔔 基本输入、输出函数🎉 总结💬
☀️ 学会编程入门必备 C# 最基础知识介绍(二)——进制、原码反码、基本语法、数据类型、类型转换
|
C# 容器
c#小灶——8.自动类型转换和强制类型转换
c#小灶——8.自动类型转换和强制类型转换前面已经认识了不同的数据类型,你们有没有尝试过让不同的数据类型进行运算呢? int a = 1;double b = a;Console.WriteLine(b);运行结果是:1 我们把一个整型的变量赋值给了一个浮点型的变量,可以正常的输出,如果我们把一个浮点型的变量赋值给一个整型的变量呢? double a = 1;int b = a;Console.WriteLine(b);这样就会报错。
832 0