C# 强制类型转换和as区别和不同使用场景

文章目录

    • 1.强制类型转换
    • 2. as 运算符
    • 3.实例
    • 总结:

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

1.强制类型转换

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

2. as 运算符

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

3.实例

  1. 强制类型转换实例:
object obj = "Hello, World!";
string str = (string)obj; // 此处的强制类型转换是安全的,因为 obj 实际上是一个字符串。// 或者对于值类型的转换:
int value = 123;
double dblValue = (double)value; // 这是一个合法的数值类型转换。
  1. as 运算符实例:
class Animal { }
class Dog : Animal { }Animal myAnimal = new Dog();
Dog myDog = myAnimal as Dog; // 此处转换成功,myDog 现在引用了 Dog 类型的对象。// 如果尝试转换一个实际上是 Animal 类型的对象:
Animal notADog = new Animal();
Dog failedDog = notADog as Dog; // 此处转换失败,failedDog 将被赋值为 null。// 对于值类型,以下代码无法编译,因为 int 是非 null 值类型:
// int? nullableInt = 123;
// object obj = nullableInt.Value;
// int backToInt = obj as int; // 编译错误,as 不适用于从对象到非 null 值类型的转换。

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

总结:

强制转换适合你知道转换一定能成功的情况,并且愿意承担转换失败时引发异常的风险。

  • as 运算符提供了一种更安全、非破坏性的转换方式,尤其在处理可能为 null 的引用类型时。但它不会执行用户自定义的转换操作,仅限于参考类型间的隐式转换或者引用类型到接口的转换。

python推荐学习汇总连接:
50个开发必备的Python经典脚本(1-10)

50个开发必备的Python经典脚本(11-20)

50个开发必备的Python经典脚本(21-30)

50个开发必备的Python经典脚本(31-40)

50个开发必备的Python经典脚本(41-50)
————————————————

​最后我们放松一下眼睛
在这里插入图片描述

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

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

相关文章

Python基础知识:整理7 字典的定义及其相关操作

1 字典的定义 # 1. 字典的定义 # 定义字典的字面量 # {key: value, key: value, ......, key: value}# 定义字典变量 # my_dict {key: value, key: value, ......, key: value}# 定义空字典 # my_dict {} # my_dict dict()定义重复Key的字典 my_dict1 {"张三": …

基于JavaWeb+SSM+Vue四六级词汇微信小程序系统的设计和实现

基于JavaWebSSMVue四六级词汇微信小程序系统的设计和实现 源码获取入口KaiTi 报告Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 KaiTi 报告 (1)课题背景 伴随着社会的快速发展, 现代社…

sql查看指定时间段的数据

要查看指定时间段的数据,您可以使用SQL中的WHERE子句来过滤日期或时间列,以仅选择在指定时间段内的行。以下是一个示例查询,假设您有一个名为table_name的表,其中包含一个名为date_column的日期列: SELECT * FROM tab…

海康威视校园招聘笔试题

1、10、10、4、4四个数,怎么算出24点?(10*10-4)/424 2、下列表达式在32位机器编译环境下的值() [cpp] view plaincopyprint? class A { }; class B { public: B(); virtual ~B(); }; class C { private…

LINUX常见问题之oom kill

一、OOM含义 OOM(Out Of Memory)机制为Linux内核中一种自我保护机制,当系统分配不出内存时(触发条件)会触发这个机制,由系统在已有进程中挑选一个占用内存较多,回收内存收益最大的进程杀掉来释放内存。 Linux下允许程序申请比系统可用内存更…

2024年杭州电子科技大学843信号与系统考研大纲,真题,参考书,杭电843,信息与通信

杭电 杭州电子科技大学843考研信号与系统大纲,真题,参考书,博睿泽信息通信考研论坛。 杭州电子科技大学 全国硕士研究生招生考试业务课考试大纲 考试科目名称:信号与系统 科目代码:843 一、信号与系统概述 1、掌握连续…

Nginx location 配置 - Part 2

接上文 链接: Nginx 简介和入门 - part1 上文 我们简单地在 nginx 创建了3个虚拟主机, 虽然这个3个主机都是用占用80端口 但是我们可以用不同的域名来实现区分访问3台虚拟主机。 但是, 实际项目上, 我们更加多地会使用location 配置而不是…

机器学习-线性回归实践

目标:使用Sklearn、numpy模块实现展现数据预处理、线性拟合、得到拟合模型,展现预测值与目标值,展现梯度下降; 一、导入模块 import numpy as np np.set_printoptions(precision2) from sklearn.linear_model import LinearRegr…

JVM主要的几种垃圾回收算法

1、Java 为什么要实现自动内存管理 ? 简化开发过程:通过内存自动管理可以避免手动分配和释放内存的麻烦,减少了内存泄漏和内存错误的风险,让研发能更专注于业务逻辑,不必纠结于内存管理的细节。 提高开发效率&#xff…

vite 搭建vue3 TS项目初始框架

目录 仓库地址: 一.搭建项目 1.安装 Vite: 2.创建 Vue 3 项目: 3.进入项目目录: 4.安装依赖: 5.运行项目: 6.流程实操 二.修改项目结构,显示自定义的页面 1.整理静态样式文件 1.1.在 sr…

Dell 机架式服务器 - 高级定制服务

Dell 机架式服务器 - 高级定制服务 1. Dell Technologies2. 机架式服务器 - 高级定制服务2.1. Servers & Storage (服务器及存储) -> Servers2.2. Rack Servers (机架式服务器)2.3. Shop2.4. PowerEdge Rack Servers (PowerEdge 机架式服务器)2.5. PowerEdge R760 Rack …

一些常用源分享

pip源 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 华中理工大学:http://pypi.hustunique.com/ 山东理工大学:h…

编译原理期末大题步骤——例题

一、预测分析方法步骤 提取左公因子,消除左递归判断文法是否为LL(1)文法若是,构造预测分析表;否则,不能进行分析。根据预测分析表对输入串进行分析 例子: 文法G[E]: …

mysql进阶-视图

目录 1. 用途 2. 语法 2.1 创建或替换视图 2.2 修改视图 2.3 查看视图: 2.4 删除视图: 3. 其他 3.1 操作视图 3.2 迁移数据库 1. 用途 视图可以理解为一个复杂查询的简称,它可以帮助我们简化查询,主要用于报表查询:例如…

DataFrame详解

清洗相关的API 清洗相关的API: 1.去重API: dropDupilcates 2.删除缺失值API: dropna 3.替换缺失值API: fillna 去重API: dropDupilcates dropDuplicates(subset):删除重复数据 1.用来删除重复数据,如果没有指定参数subset,比对行中所有字段内容,如果全部相同,则认为是重复数据,…

Hyperledger Fabric 自动发现网络信息 discover 工具使用

客户端要往 Fabric 网络中发送请求,首先需要知道网络的相关信息,如网络中成员组织信息、背书节点的地址、链码安装信息等。 在 Fabric v1.2.0 版本之前,这些信息需要调用者手动指定,容易出错;另外,当网络中…

拼多多API:电商智能化发展的强大引擎

拼多多API:电商智能化发展的强大引擎 随着互联网的快速发展和数字化转型的加速,电商行业正面临着前所未有的机遇与挑战。在这个背景下,拼多多API作为电商智能化发展的强大引擎,正发挥着越来越重要的作用。本文将探讨拼多多API如何…

IOC与DI思想

目录 一、IOC1、名词解释2、传统与IOC对比(优缺点)3、spring框架中的IOC 二、DI三、IOC和DI关系四、相关名词 一、IOC 1、名词解释 IOC—Inversion of Control,即“控制反转”,不是技术,是一种设计思想。 控制&…

SPL-cmcRVFL+

吐槽 作者未提供代码,还有图1敢再糊点吗?

简单的MOV转MP4方法

1.下载腾讯的QQ影音播放器, 此播放器为绿色视频播放器, 除了播放下载好的视频外没有臃肿无用功能 官网 QQ影音 百度网盘链接:https://pan.baidu.com/s/1G0kSC-844FtRfqGnIoMALA 提取码:dh4w 2.用QQ影音打开MOV文件 3.右下角打开影音工具箱 , 选择截取…