[毕业生的商业软件开发之路]C#数据类型转换

简介:




近期开始接触到在校学生、高校实习生和毕业生,在此说一下笔者对这些徘徊在职场门口的学生一些建议,希望能给这些初学者进入软件开发行业带来一些帮助,使得毕业生能更顺利的进入软件开发公司开始职场生涯,人生来一个完美的转弯。[袁永福版权所有]

--------------------------------------------------------------------

在程序开发中经常需要进行数据类型的转换,C#提供强制数据类型转换和使用关键字as的数据类型转换,还提供关键字is来进行数据类型的判断。

强制类型转换

强制类型转换就是将一个类型的数据无条件的强制转换为其他数据类型。具有安全的强制类型转换和不安全的强制类型转换。

对于数值类型的基础数据类型,存在以下安全的强制数据类型转换路径“boolsbytecharshortintlongfloatdouble”,从这里可以看出,这条安全的路径越靠后,取值范围就越大。比如以下代码就是一个安全的强制类型转换。

int v1 = 98;

double v2 = (double)v1;

对于安全的强制类型转换,可以将类型转换运算符省掉,比如上述第二行代码可以写成“double v2 = v1;

反过来,在这个强制类型转换路径上逆道行驶,则就是不安全的强制类型转换,比如以下代码就是不安全的强制类型转换,

double v3 = 98.34;

int v4 = (int )v3;

这个转换后,数值“ 98.34 被转换为“ 98 ,两者不等,因此是不安全的,可能导致程序错误,而且不安全的强制转换中转换符号不能省略,比如上面的第二行代码就不能写成“int v = v ;”。

类类型之间也能进行强制类型转换,语法为“类型名称 变量名=(类型名称)变量名 2 ,比而且要保证要转换的对象引用是转换后的类型或者派生类。

如下所示,程序中定义了以下几个类型,各个类型的继承派生关系如下。

 

 

 

这几个类型按照继承关系形成一个以“System.Object”类型为唯一根节点的树状结构,从叶子节点出发到跟节点,形成多条安全的数据类型转换路径,例如“卡车类型→汽车类型→机械类型→Object”,和“大米类型→食品类型→Object”,沿着这条路径进行类型转换是安全的,肯定能转换成功;反过来是不安全的类型转换,可能不成功。

例如以下转换过程是安全的,肯定成功

卡车类型 instance = new 卡车类型( ) ;

机械类型 instance2 = ( 机械类型 ) instance ;

以下转换过程是不安全的,可能会失败

机械类型 instance = new 卡车类型( ) ;

机械类型 instance2 = new 电钻类型( ) ;

 

汽车类型 car1 = ( 汽车类型 ) instance1 ; // 不安全的转换,能成功。

汽车类型 car2 = ( 汽车类型 ) instance2 ; // 不安全的转换,不成功,会爆运行时错误。

若在这个类型继承树上凭空跳到另外一个节点,则就是不可能的类型转换,而且会爆编译错误的,例如以下的类型转换的代码就根本行不通。

卡车类型 instance = new 卡车类型( );

食品类型 instance2 =  食品类型 ) instance ;

 

 

as类型转换

由于强制类型转换可能会发生错误,C#提供一个使用关键字as的类型转换。其语法为“要转换的类型名称 变量 要转换的变量 as 要转换的类型名称 ”,若转换成功则会设置变量值,若转换失败则设置变量值为空引用。[袁永福原创]

例如对于上节课程提到的数据类型转换路径“卡车类型→汽车类型→机械类型→Object”,则可以执行以下的代码

汽车类型 instance = new 卡车类型( );

客车类型 bus = instance  as  客车类型 ;

由于这是不安全的转换,转换失败,此时程序不会报错,但会设置变量bus为空引用。

对于以下代码

汽车类型 instance = new 卡车类型( );

卡车类型 instance2 = instance as 卡车类型;

这是安全的转换,转换成功,会设置变量instance2的变量指向某个对象实例。

使用as类型转换比强制类型转换的好处就是转换失败时不会发生错误,此时应用程序需要检查转换结果值来判断转换是否成功。[袁永福原创]

is类型判断

C#提供关键字is来进行类型判断,其用法为“变量名 is 类型名称”,这是一个表达式,返回的是布尔值,用于判断指定的对象实例可否转换为指定的类型。例如执行以下代码

机械类型 instance = new 卡车类型( );

bool result = instance is 汽车类型 ;

由于此处instance指向的是一个卡车类型,而卡车类型是汽车类型的派生类,可以转换为汽车类型,因此instance是类型汽车类型,因此result的值为true

使用关键字is的类型判断能判断对象是否是指定的类型或者派生类型,也可判断是否实现了指定的接口,而且这个过程不会报错。[袁永福原创]




     本文转自xdesigner 51CTO博客,原文链接:http://blog.51cto.com/xdesigner/624601,如需转载请自行联系原作者






相关文章
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
227 1
|
存储 C# 索引
C# 一分钟浅谈:变量与数据类型简介
【9月更文挑战第1天】在 C# 编程中,了解变量与数据类型至关重要。本文详细介绍了 C# 中的值类型(如整数、浮点数、布尔值等)和引用类型(如类、接口、数组、字符串)。通过示例代码展示了变量的声明与使用方法,并针对数据类型转换错误、变量未初始化及数值溢出等常见问题提供了解决方案。正确选择数据类型不仅能提升程序性能,还可避免潜在错误,有助于编写高质量代码。
327 50
|
开发框架 .NET API
以C#一分钟浅谈:GraphQL 数据类型与查询
本文从C#开发者的角度介绍了GraphQL的基本概念、核心组件及其实现方法。GraphQL由Facebook开发,允许客户端精确请求所需数据,提高应用性能。文章详细讲解了如何在C#中使用`GraphQL.NET`库创建Schema、配置ASP.NET Core,并讨论了GraphQL的数据类型及常见问题与解决方案。通过本文,C#开发者可以更好地理解并应用GraphQL,构建高效、灵活的API。
349 64
|
开发框架 .NET 测试技术
C# 一分钟浅谈:GraphQL 数据类型与查询
本文介绍了GraphQL的基本概念、数据类型及查询方法,重点从C#角度探讨了GraphQL的应用。通过Hot Chocolate库的实例,展示了如何在ASP.NET Core中实现GraphQL API,包括安装、定义Schema、配置及运行项目。文中还讨论了常见问题与解决方案,旨在帮助开发者更好地理解和使用GraphQL。
222 2
|
存储 C# 开发者
C# 编程基础:注释、变量、常量、数据类型和自定义类型
C# 编程基础:注释、变量、常量、数据类型和自定义类型
200 1
|
Java C#
C# 和 java 基本数据类型
C# 和 java 基本数据类型
134 0
|
开发框架 .NET 程序员
掌握C#语言的精髓:基础知识与实用技能详解(数据类型与变量+ 条件与循环+函数与模块+LINQ+异常+OOP)
掌握C#语言的精髓:基础知识与实用技能详解(数据类型与变量+ 条件与循环+函数与模块+LINQ+异常+OOP)
138 0
|
存储 C#
深入C#数据类型
深入C#数据类型
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
253 0
|
存储 C# 索引
C#学习相关系列之数据类型类的定义(一)
C#学习相关系列之数据类型类的定义(一)
287 0