当前位置: 首页 > news >正文

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

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

相关文章:

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

文章目录 1.强制类型转换2. as 运算符3.实例总结: 在C#中,as 和 强制类型转换(例如 (T)value)的主要区别在于它们处理类型转换不成功时的行为和适用场景: 1.强制类型转换 使用语法:Type variable (Type)…...

什么是 DDoS 攻击

布式拒绝服务 (DDoS) 攻击是一种恶意尝试,通过大量互联网流量淹没目标或其周围基础设施,从而破坏目标服务器、服务或网络的正常流量。 DDoS 攻击通过利用多个受感染的计算机系统作为攻击流量源来实现有效性。被利用的机器可以包括计算机和其他网络资源。 从高层来看,DDoS 攻…...

c++隐式类型转换与explicit

我们知道,一个float与int做运算时,系统会首先个int类型转换为float类型之后再进行运算,这种隐式类型转换也会发生在类中 看以下例子,定义一个类 class myTime { public:int Hour;myTime() {};myTime(int h) :Hour(h) {}; }; 在…...

BERT Intro

继续NLP的学习,看完理论之后再看看实践,然后就可以上手去kaggle做那个入门的project了orz。 参考: 1810.04805.pdf (arxiv.org) BERT 论文逐段精读【论文精读】_哔哩哔哩_bilibili (强推!)2023李宏毅讲解大模型鼻祖BERT,一小时…...

“To-Do Master“ GPTs:重塑任务管理的趣味与效率

有 GPTs 访问权限的可以点击链接进行体验:https://chat.openai.com/g/g-IhGsoyIkP-to-do-master 部署私人的 To-Do Master 教程:https://github.com/Reborn14/To-Do-Master/tree/main 引言 在忙碌的日常生活中,有效地管理日常任务对于提高生…...

npm安装vue,添加淘宝镜像

如果是第一次使用命令栏可能会遇到权限问题。 解决vscode无法运行npm和node.js命令的问题-CSDN博客 安装 在vscode上面的导航栏选择terminal打开新的命令栏 另外可能会遇到网络或者其他的问题,可以添加淘宝镜像 npm install -g cnpm --registryhttps://registry.…...

LeetCode 2707. 字符串中的额外字符

一、题目 1、题目描述 给你一个下标从 0 开始的字符串 s 和一个单词字典 dictionary 。你需要将 s 分割成若干个 互不重叠 的子字符串,每个子字符串都在 dictionary 中出现过。s 中可能会有一些 额外的字符 不在任何子字符串中。 请你采取最优策略分割 s &#xff…...

Js进阶31-DOM 操作专题

1. JavaScript 的组成部分: ECMAScript:简称 ES,它是欧洲计算机协会,大概每年的六月中旬定制语法规范。DOM:全称 Document Object Model,即为文档对象类型。BOM:全称 Browser Object Model&…...

Hive之set参数大全-4

F 指定在使用 FETCH 命令提取查询结果时的序列化/反序列化器 hive.fetch.output.serde 是 Hive 的一个配置参数,用于指定在使用 FETCH 命令提取查询结果时的序列化/反序列化器。 以下是一个示例: -- 设置 hive.fetch.output.serde 为 org.apache.had…...

竞赛保研 基于深度学习的人脸识别系统

前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的人脸识别系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/…...

9.建造者模式

文章目录 一、介绍二、代码三、实际使用总结 一、介绍 建造者模式旨在将一个复杂对象的构建过程和其表示分离,以便同样的构建过程可以创建不同的表示。这种模式适用于构建对象的算法(构建过程)应该独立于对象的组成部分以及它们的装配方式的…...

简单的MOV转MP4方法

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

YOLOv8改进 | Neck篇 | 利用ASF-YOLO改进特征融合层(适用于分割和目标检测)

一、本文介绍 本文给大家带来的改进机制是ASF-YOLO(发布于2023.12月份的最新机制),其是特别设计用于细胞实例分割。这个模型通过结合空间和尺度特征,提高了在处理细胞图像时的准确性和速度。在实验中,ASF-YOLO在2018年数据科学竞赛数据集上取得了卓越的分割准确性和速度,…...

基于模块自定义扩展字段的后端逻辑实现(一)

目录 一:背景介绍 二:实现过程 三:字段标准化 四:数据存储 五:数据扩展 六:表的设计 一:背景介绍 最近要做一个系统,里面涉及一个模块是使用拖拉拽的形式配置模块使用的字段表…...

力扣:18.四数之和

一、做题链接:18. 四数之和 - 力扣(LeetCode) 二、题目分析 1.做这一道题之前本博主建议先看上一篇《三数之和》 2.题目分析 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重…...

.netcore 6 ioc注入的三种方式

1、定义接口 public interface MyInterceptorInterface 2、实现接口 public class MyInterceptorImpl : MyInterceptorInterface 在构造中增加以下代码&#xff0c;便于观察 static ConcurrentDictionary<string, string> keyValues new ConcurrentDictionary<s…...

Python轴承故障诊断 (十)基于VMD+CNN-Transfromer的故障分类

目录 1 变分模态分解VMD的Python示例 2 轴承故障数据的预处理 2.1 导入数据 2.2 故障VMD分解可视化 3 基于VMDCNN-Transformer的轴承故障诊断分类 3.1 定义VMD-CNN-Transformer分类网络模型 3.2 设置参数&#xff0c;训练模型 3.3 模型评估 代码、数据如下&#xff1a…...

【复习】人工智能 第7章 专家系统与机器学习

专家系统就是让机器人当某个领域的专家&#xff0c;但这章专家系统不咋考&#xff0c;主要靠书上没有的机器学习。 一、专家系统的基本组成 二、专家系统与传统程序的比较 &#xff08;1&#xff09;编程思想&#xff1a; 传统程序 数据结构 算法 专家系统 知识 推理 &…...

使用 Apache PDFBox 操作PDF文件

简介 Apache PDFBox库是一个开源的Java工具&#xff0c;专门用于处理PDF文档。它允许用户创建全新的PDF文件&#xff0c;编辑现有的PDF文档&#xff0c;以及从PDF文件中提取内容。此外&#xff0c;Apache PDFBox还提供了一些命令行实用工具。 Apache PDFBox提供了创建、渲染、…...

【Python 常用脚本及命令系列 3.2 -- 检测到弹框跳出然后关掉它--脚本实现】

文章目录 简介脚本实现 简介 在Python中&#xff0c;你可以使用第三方库如pyautogui和pygetwindow来检测屏幕上的弹框并关闭它。这些库可以模拟鼠标和键盘操作&#xff0c;也可以获取窗口信息。 首先&#xff0c;需要安装这些库&#xff08;如果你还没有安装的话&#xff09;&…...

AI 开发实战:给团队定一套能落地的 AI 使用规范

AI 开发实战&#xff1a;给团队定一套能落地的 AI 使用规范 一、为什么团队用了 AI 反而容易更乱&#xff1f; 因为每个人都在各自试&#xff1a; 有人用来写代码有人用来写文档有人用来查错有人输出直接复制上线 如果没有基本规范&#xff0c;效率可能提升了&#xff0c;但风险…...

程序员巫术:用玩偶诅咒删库的同事

——软件测试从业者的专业反思与健康应对在软件开发的战场上&#xff0c;测试工程师常被视为“质量守门人”&#xff0c;肩负着拦截缺陷、守护产品稳定的重任。然而&#xff0c;当一位愤怒的测试员掏出针线缝制玩偶&#xff0c;试图用“巫术”诅咒那位鲁莽删库的同事时&#xf…...

Redis未授权访问漏洞实战:从SSH公钥到反弹shell的5种利用方式详解

Redis未授权访问漏洞深度攻防&#xff1a;5种高阶利用与防御方案 Redis作为高性能键值数据库&#xff0c;其未授权访问漏洞长期位居企业安全风险Top 10。本文将突破常规教程框架&#xff0c;从攻击者视角剖析5种实战利用手法&#xff0c;同时提供企业级防御方案。不同于基础复现…...

云效流水线实战:从零部署Java应用到阿里云ECS(含完整脚本)

云效流水线实战&#xff1a;从零部署Java应用到阿里云ECS&#xff08;含完整脚本&#xff09; 在当今快节奏的软件开发环境中&#xff0c;自动化部署已成为提升团队效率的关键环节。阿里云云效平台提供的流水线功能&#xff0c;为开发者提供了一套完整的CI/CD解决方案&#xff…...

从卡顿到实时:Shenyu网关WebSocket通知系统如何解决微服务配置同步难题

从卡顿到实时&#xff1a;Shenyu网关WebSocket通知系统如何解决微服务配置同步难题 你是否遇到过这样的困境&#xff1a;API网关配置更新后&#xff0c;客户端需要等待数分钟甚至更长时间才能生效&#xff1f;在秒杀活动等高并发场景下&#xff0c;这种延迟可能导致流量分配不…...

Papercups开源客户聊天系统:7步快速定制部署完整指南

Papercups开源客户聊天系统&#xff1a;7步快速定制部署完整指南 【免费下载链接】papercups Open-source live customer chat 项目地址: https://gitcode.com/gh_mirrors/pa/papercups Papercups是一个功能强大的开源实时客户聊天系统&#xff0c;专为注重数据隐私和安…...

DALL-E2-pytorch训练日志完全解读指南:如何从loss曲线判断模型健康状态

DALL-E2-pytorch训练日志完全解读指南&#xff1a;如何从loss曲线判断模型健康状态 【免费下载链接】DALLE2-pytorch Implementation of DALL-E 2, OpenAIs updated text-to-image synthesis neural network, in Pytorch 项目地址: https://gitcode.com/gh_mirrors/da/DALLE2…...

告别手动调参!模糊PID如何让直流电机在负载突变时稳如泰山?

模糊PID控制&#xff1a;让直流电机在负载突变时稳如泰山的实战指南 引言&#xff1a;工业自动化中的电机控制痛点 在自动化产线上&#xff0c;直流电机突然遭遇负载变化时&#xff0c;你是否也经历过这样的场景&#xff1f;——机械臂正在精准抓取工件&#xff0c;突然因为物料…...

不止于仿真:用COMSOL LiveLink玩转超声相控阵动态聚焦与参数化扫描

超越静态仿真&#xff1a;COMSOL LiveLink在超声相控阵动态聚焦中的高阶应用 当超声相控阵技术遇上COMSOL的多物理场仿真能力&#xff0c;工程师们便获得了一把打开声波精准操控之门的钥匙。不同于传统静态仿真&#xff0c;动态聚焦与参数化扫描技术让声场控制如同探照灯般灵活…...

HeadPose角度检测避坑指南:从原理到车载疲劳预警系统部署

HeadPose角度检测工程实战&#xff1a;车载疲劳预警系统的嵌入式部署精要 引言&#xff1a;当计算机视觉遇上行车安全 凌晨三点的高速公路上&#xff0c;一辆货运卡车正以80公里时速行驶。驾驶座上的王师傅眼皮开始不受控制地下垂&#xff0c;头部微微前倾——这个细微动作被安…...