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

C# 转换(is和as运算符)

is运算符

之前已经说过了,有些转换是不成功的,并且会在运行时抛出InvalidCastException异常。
我们可以使用is运算符来检查转换是否会成功完成,从而避免盲目尝试转换。
is运算符的语法如下,其中Expr是源表达式:

image
如果Expr可以通过以下方式成功转换为目标类型,则运算符返回true:

  • 引用转换,
  • 装箱转换
  • 拆箱转换
    例如,在如下代码中,使用is运算符来检测Employee类的变量bill是否能转换为Person
    类型,然后进行合适的操作。
class Employee:Person{}class Person
{public string Name="Anonymous";public int Age=25;
}class Program
{static void Main(){Employee bill=new Employee();//检测变量bill是否能转换为Person类型if(bill is Person){Person p=bill;Console.WriteLine($"Person Info:{p.Name},{p.Age}")}}
}

is运算符只可以用于引用转换以及装箱和拆箱转换,不能用于用户自定义转换。

as运算符

as运算符和强制转换运算符类似,只是它不抛出异常。如果转换失败,它返回null而不是
抛出异常。
as运算符的语法如下,其中:

  • Expr是源表达式;
  • TargetType是目标类型,它必须是引用类型。

image
由于as运算符返回引用表达式,它可以用作赋值操作中的源。例如,我们使用as把Employee
类型的变量bill转换为Person类型,并且赋值给一个Person类型的变量P。在使用它之前应该
检查p是否为null。

class Employee:Person{}class Person
{public string Name="Anonymous";public int Age=25;
}class Program
{static void Main(){Employee bill=new Employee();Person p;p=bill as Person;if(p!=null){Console.WriteLine($"Person Info:{p.Name},{p.Age}");}}
}

和is运算符类似,as运算符只能用于引用转换和装箱转换,不能用于用户自定义转换或到
值类型的转换。

http://www.xdnf.cn/news/16043.html

相关文章:

  • vue-pinia
  • WebkitSpeechRecognition 语音识别
  • QT6 源,七章对话框与多窗体(5) 文件对话框 QFileDialog 篇二:源码带注释
  • nginx + uwsgi + systemd 部署 flask
  • 在Windows Server 2012 R2中安装与配置IIS服务并部署mssql靶机教程
  • springboot实战篇1
  • 基于 HAProxy 搭建 EMQ X 集群
  • C++的“链”珠妙笔:list的编程艺术
  • 解决vscode中vue格式化后缩进太小的问题,并去除分号 - 设置Vetur tabSize从2到4,设置prettier取消分号semi
  • 计算机发展史:人工智能时代的智能变革与无限可能
  • 基于WebSocket的安卓眼镜视频流GPU硬解码与OpenCV目标追踪系统实现
  • 【PTA数据结构 | C语言版】哥尼斯堡的“七桥问题”
  • C# Lambdab表达式 Var 类
  • Elupload实现多个文件上传与已上传列表中做对比,若重复则只保留已上传列表中的数据,同时告诉用户,有哪些文件重复上传了
  • 搭建种草商城框架指南
  • 飞算科技:以原创技术为翼,赋能产业数字化转型
  • Linux第三课:需要自己安装的远程登录工具PuTTY的介绍
  • 【PTA数据结构 | C语言版】求单源最短路的Dijkstra算法
  • Taro 本地存储 API 详解与实用指南
  • G7打卡——Semi-Supervised GAN
  • EMBMS1820芯祥科技18单元电池监控器芯片数据手册
  • 华控的科技布局——全球化战略与合作生态
  • 力扣(LeetCode)第 161 场双周赛
  • macbookpro m1 max本儿上速搭一个elasticsearch+kibana环境
  • 基于deepseek的LORA微调
  • 【设计模式C#】简单工厂模式(用于简化获取对象实例化的复杂性)
  • 个人中心产品设计指南:从信息展示到用户体验的细节把控
  • mongodb源代码分析createCollection命令由create.idl变成create_gen.cpp过程
  • 在.NET Core API 微服务中使用 gRPC:从通信模式到场景选型
  • uniapp使用uni-ui怎么修改默认的css样式比如多选框及样式覆盖小程序/安卓/ios兼容问题