C# 类型转换 as、is、括号强转之间的区别

news/2025/1/12 11:16:40/文章来源:https://www.cnblogs.com/tdreamtec/p/18665240

文章目录
1、括号强制类型转换
2、as运算符
3、实例

在C#中,as和强制类型转换(如:(T)Value)的主要区别在于它们处理类型转换不成功时的行为和应用场景

1.括号强制类型转换

使用语法:Type variable = (Type)Expression;
当你确定Expression运行时可以安全的转换为目标Type类型时,使用强制类型转换;
如果转换不可行(如转换的对象实际上不是目标类型或其派生类型),将会抛出System.InvildCastException异常
对于值类型之间的转换,如果该转换是预定义的(如内置数值类型的扩大或缩小转换),编译器会确保转换合法,否则同样会导致编译错误或运行时异常

  1. as运算符

使用语法:Type variable = Expression as Type;
当你想尝试将一个对象转换为目标类型但不想因为转换失败抛出异常时,可以使用as运算符;
如果转换成功,variable将会被转换为目标类型的实例;如果转换失败,variable将会被赋值为null(对于引用类型)
注意,对于值类型,不能为null;所以as运算符不能用于从非null值类型到其他值类型的转换

  1. 实例

强制类型转换实例

点击查看代码 object obj = "Hello world!"; string str = (string)obj;//此处强制类型转换是安全的,因为ojg实际上就是一个字符串

//或者对于值类型的转换
int value = 32;
double dValue = (double)value;//这是一个合法的数值类型转换

as运算符实例

点击查看代码 class Animal {

}
Class Dog:Animal
{

}
Animal myAnimal = new Dog();
Dog myDog = myAnimal as Dog; //此处转换成功,因为myDog引用了Dog的类型的对象

//如果尝试转换一个实际上是Animal类型的对象
Animal notDog = new Animal();
Dog failedDog = notDog as Dog;//此处转换失败,failedDog 将会被赋值为 null

//对于值类型,以下代码无法编译,因为int 是非null 值类型
//int? nullableInt = 123;
//object obj = nullableInt.Value;
//Int backToInt = obj as int; //编译错误,as运算符 不适用于从对象到非 null 值类型的转换

在这两个例子中,如果使用强制类型转换并且转换不成功,程序会抛出异常。而在使用as运算符时,如果转换不成功,变量会被赋值为 null(对于引用类型)。

总结:
1.强制类型转换适用于你知道类型转换一定成功的情况下,并且愿意承担转换失败时候抛出的异常风险
2.as运算符类型转换,提供了一种更安全、非破环性的转换方式,尤其在处理可能为null的引用类型时。但它不会执行用户自定义的转换操作,仅限于参考类型之间的隐式转换或者引用类型到接口之间的转换

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

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

相关文章

bullyBox pg walkthrough Intermediate

nmap 发现80 和 22端口 访问80 端口发现 跳转 http://bullybox.local/ 在/etc/hosts 里面加上这个域名dirsearch 扫描的时候发现了.git泄露 用dunpall工具 获取.git泄露的源码查看源码 我们发现了数据库的密码 name => boxbilling, user => admin, password => Playin…

苹果系统下无痕检测是否开启iMessage服务,iMessages数据筛选,iMessage蓝号检测协议版

一、实现iMessage数据检测的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2…

数据分析之年度总结分享

背景:我们是一家国内的服装公司,在全国拥有几十家服装门店,从事18个服装品类的销售,市场覆盖国内上海、华北、华中、西南、东北、中南、西北七个区域,年销售额达数千万元。财年结束了,老板希望我们(数据分析师)能对公司的销售团队的数据进行分析,并得出结论作为下年度…

国家数据如何统一目录标识、统一身份登记和统一接口

日前,《国家数据基础设施建设指引》发布。最大的看点之一,是全国数据统一大市场:统一目录标识、统一身份登记和统一接口。那么,如何实现数据的全国统一目录标识、统一身份登记和统一接口? 一、全国统一目录标识 建立数据分类标准 顶层设计规划:由国家相关部门牵头,联合各…

信创环境下国产系统不同版本的依赖库都从哪里下载

在Linux系统中安装软件时,可能会遇到各种依赖库问题,以下是一些常见的依赖库问题及其解决方法,以及获取软件依赖包的不同途径。 1、依赖库问题 依赖库版本不兼容:安装软件时,系统提示缺少特定版本的依赖库。 依赖库缺失:软件安装需要某些库文件,但系统中未安装。 依赖冲…

1. 结构光系统标定原理

什么时逆向机法,与双目模型区别?

读量子霸权01硅时代的终结

硅时代的终结1. 量子计算机 1.1. 一种全新型计算机,在处理特定任务时能明显超越普通数字超级计算机1.1.1. 谷歌宣称自己研发的量子计算机Sycamore可以在200秒以内解决世界上最快的数字超级计算机花1万年才能完成的数学问题1.1.1.1. 谷歌的Sycamore量子计算机就是全球第一台实现…

合成橡胶 2025

1月12日: C浪反弹进行中 目前在走C-3

转:celery 常用执行命令

转自:https://blog.csdn.net/weixin_44649870/article/details/105844668celery 常用执行命令详解执行命令celery -A test-1.celery worker -n name-1 --loglevel=info --max-tasks-per-child 500 --autoscale=4,1 -Q q-1常用参数参数 说明-A / --app 要使用的应用程序实例-n …

VMware ESXi 8.0U3c macOS Unlocker OEM BIOS 集成驱动版,新增 12 款 I219 网卡驱动

VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS 集成驱动版,新增 12 款 I219 网卡驱动VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS 集成驱动版,新增 12 款 I219 网卡驱动 VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版…