首页 > 编程语言 >C# 类型转换 as、is、括号强转之间的区别

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

时间:2025-01-12 11:21:21浏览次数:1  
标签:类型转换 强转 转换 C# Dog 运算符 类型 null

文章目录
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的引用类型时。但它不会执行用户自定义的转换操作,仅限于参考类型之间的隐式转换或者引用类型到接口之间的转换

标签:类型转换,强转,转换,C#,Dog,运算符,类型,null
From: https://www.cnblogs.com/tdreamtec/p/18665240

相关文章

  • Tomcat(134) 如何在Tomcat中解决SSL会话缓存问题
    在Tomcat中,SSL会话缓存问题可能会影响SSL握手的效率和整体性能。以下是详细的故障排除和优化步骤,包括代码示例,帮助你解决Tomcat的SSL会话缓存问题。1.启用并配置SSL首先,确保Tomcat已正确配置SSL。以下是基本的SSL配置示例:1.1配置server.xml在server.xml中配置SSL:<Con......
  • Tomcat(133)Tomcat的SSL会话缓存故障排除
    在Tomcat中,SSL会话缓存问题涉及SSL会话的创建、存储和续用。正确配置和管理SSL会话缓存可以提高SSL握手的效率,减少延迟和资源消耗。以下是详细的故障排除和优化步骤,以及相关代码示例。1.确保Tomcat已启用SSL首先,确保Tomcat已正确配置SSL。以下是基本的SSL配置示例:1.1配......
  • 跟我学C++中级篇——枚举的作用
    一、枚举、宏和常量一般来说,写宏比较多的,大多是老的C++程序员或者一些比较硬核的程序员。这个硬核指的是和硬件或嵌入式打交道的,其实更接近C的风格。而C++程序员更多的喜欢使用常量包括C++11以后推出的constexpr(提醒:C和C++中常量的有细节的不同)。那么既然有了这二者,为什么......
  • Mac电脑如何安装Xmind 2025 中文思维导图软件?
    Mac电脑如何安装Xmind2025中文思维导图软件?介绍Xmind,是一款出色的思维导图和头脑风暴软件,拥有美观的智能配色方案,便于你轻松理清思路捕捉创意。丰富的导图模板及多种创意整合工具,可助力导图迸发更多活力。还拥有强大演说模式,及提供Markdown、SVG、PNG、PDF、Office等......
  • Mac电脑如何安装 Axure RP 10 原型设计软件 中文激活版?
    Mac电脑如何安装AxureRP10原型设计软件中文激活版?介绍AxureRP10forMac,是一个专业的原型设计和线框图工具,广泛应用于用户体验设计(UX)和用户界面设计(UI)领域,为设计师、产品经理、开发人员提供了强大的功能,帮助其在项目早期阶段快速创建互动原型和详细的设计文档。软......
  • Mac电脑如何安装Xmind 2025 中文思维导图软件?
    Mac电脑如何安装Xmind2025中文思维导图软件?介绍Xmind,是一款出色的思维导图和头脑风暴软件,拥有美观的智能配色方案,便于你轻松理清思路捕捉创意。丰富的导图模板及多种创意整合工具,可助力导图迸发更多活力。还拥有强大演说模式,及提供Markdown、SVG、PNG、PDF、Office等......
  • yolov8旋转目标检测部署教程(附代码c++_python)
    文章目录简介旋转目标检测的重要性挑战与难点技术方法数据增强特征提取旋转敏感的损失函数多任务学习先验知识引导后处理策略现有框架和技术未来趋势1.准备环境2.模型转换为ONNX格式导入库转换为ONNX3.ONNX模型部署导入库加载ONNX模型预处理后处理推理过程可视化结......
  • Mac电脑如何安装 Axure RP 10 原型设计软件 中文激活版?
    Mac电脑如何安装AxureRP10原型设计软件中文激活版?介绍AxureRP10forMac,是一个专业的原型设计和线框图工具,广泛应用于用户体验设计(UX)和用户界面设计(UI)领域,为设计师、产品经理、开发人员提供了强大的功能,帮助其在项目早期阶段快速创建互动原型和详细的设计文档。软......
  • MacOS删除多余的Windows启动项
    我的Macbook之前通过BootCamp安装了windows后又删除了,但是开机按住option键还是会出现Windows启动盘选项,虽然没什么影响但还是觉得有问题,搜索一番找到删除方法,记录一下。主要问题是windows在Mac的EFI分区添加了相关内容,而删除BootCamp及分区并未删除对应的记录,所以解决方案就是手......
  • D - Coming of Age Celebration (前缀+差分)
    题目链接:https://atcoder.jp/contests/abc388/tasks/abc388_d题意:一共有n个外星人,每当有一个外星人成年后,成年的外星人就要给他一块钱(如果没钱就不给),返回操作后数组思路:模拟一下,可以把数组前面已经成年的外星人对下一个刚好要成年的外星人的钱数贡献记作前缀信息s,随着数......