当前位置: 首页 > 编程日记 > 正文

NET基础(3):is 和 as 操作符

在C#语言中进行类型转换的另外一种方式是使用is和as操作符。is检查对象是否兼容于指定类型,返回Boolean值true或false。注意,is操作符永远不抛出异常,例如以下代码:

Object o = new Object();Boolean b1 = (o is Object);    //返回true
Boolean b2 = (o is Employee);    //返回false

如果对象引用null,is操作符总是返回false,因为没有可以检查其类型的对象。

is操作符通常像下面这样使用:

if(o is Employee)
{Employee e = (Employee)o;
}

在上述代码中,CLR实际检查两次对象类型。is操作符首先核实o是否兼容于Employee类型,如果是,在if语句块内进行类型转换,CLR再次核实o是否引用一个Employee。CLR的类型检测增加了安全性,但无疑会对性能造成一些损失。这是因为CLR首先必须判断变量o引用的对象的实际类型。然后,CLR必须遍历继承层次结构,用每个基类型去核对指定的类型(Employee)。由于这是一个相当常用的编程模式,所以c#专门提供了as操作符,目的就是简化这种代码的写法,同时提升其性能。

Employee e = o as Employee;
if(e != null)
{//在if中使用e
}

在这段代码中,CLR核实o是否兼容于Employee类型;如果是,as返回对同一个对象的非null引用。如果o不兼容与Employee类型,as 返回null。注意,as操作符造成CLR只检验一次对象类型。if语句只检测e是否为null;这个检查速度比检验对象的类型要快的多。

as 操作符的工作方式与强制类型转换一样,只是它永远不会抛出异常,如果对象不能转型,结果就是null。所以,正确做法是检查最终生成的引用是否为null。

转载于:https://www.cnblogs.com/sunyj/p/5537608.html

相关文章:

制作大白菜PE盘

大白菜是一款功能非常强大的U盘启动盘制作工具,通过大白菜我们可以把U盘做成可以引导电脑启动的启动盘,同时可以用于装系统或维护系统,虽然制作方法非常简单,不过还是有很多人不懂如何制作大白菜U盘启动盘,这两天我刚好…

为方便ATS管理建立的一些命令别名

转载自https://blog.zymlinux.net/index.php/archives/129 玩ats经常需要切换目录什么感觉敲得麻烦了就建立了一些命令别名,就方便多了。 在用户目录下的.bashrc文件中加入以下内容: alias alogcd /usr/local/var/log/trafficserver;pwd alias atscd /us…

short s1 = 1; s1 = s1 + 1;有错而short s1 = 1; s1 += 1正确

这个问题以前碰到过,也研究过,发表一下: 如果你认为表达式(x i)只是表达式(x x i)的简写方式,这并不准确。这两个表达式都被称为赋值表达式。第二个表达式使用的是简单赋值操作…

pom文件中引入常用的maven仓库

给大家分享几个maven仓库&#xff0c;如果本地总是下载很慢的话可以尝试换一下仓库或者多加几个。可以直接拖放在pom.xml中使用。 阿里云仓库 <mirrors><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.ali…

ats新手学习参考

转载自https://blog.zymlinux.net/index.php/archives/129 首先申明本人是个实实在在的菜鸟&#xff0c;现在也只是搭建起来ats玩玩简单的&#xff0c;写本文只是为了给完全的小白一个参考而已。 本人刚开始接触ats的时候&#xff0c;从ats安装到配置也遇到了很多基本的问题&am…

[svc]磁盘接口与RAID

一 磁盘接口 IDE 传统家用: /dev/hda1 SISC 传统服务器: /dev/sdb1 SATA 现在家用 SAS 现在服务器用 FC(光纤通道) 高级服务器 注意: 分区编号,1-4只能给主分区或扩展分区使用,逻辑分区是基于扩展分区来搞的,编号从5开始. MBR分区参考 现在计算机性能瓶颈往往在硬盘: …

条形码?二维码?生成、解析都在这里!

二维码生成与解析 一、生成二维码 二、解析二维码 三、生成一维码 四、全部的代码 五、pom依赖 直接上代码&#xff1a; 一、生成二维码 public class demo {private static final String path1"D:\\code.jpg";private static void qr(String text,int width,int w…

异步预热在线视频实现

转载自https://blog.zymlinux.net/index.php/archives/100 毕业之际给学校搭建了基于ATS的正向代理缓存服务器&#xff0c;专门用来处理优酷土豆等在线视频流量。通过改写一个浏览器做成在线视频专用浏览器&#xff0c;内置了ATS的代理设置。 用php配合memcacheq和小脚本实现了…

文本输入框、密码输入框

当用户要在表单中键入字母、数字等内容时&#xff0c;就会用到文本输入框。文本框也可以转化为密码输入框。 语法&#xff1a; <form><input type"text/password" name"名称" value"文本" /> </form> 1、type&#xff1a; 当t…

Linux安装mysql,一步到位!

今天在腾讯云上面买了一个服务器&#xff0c;想要把自己的项目部署一下&#xff0c;就要安装mysql&#xff0c;以下是我的安装步骤,在网上有很多人把install敲错了&#xff0c;还有的少-get&#xff0c;种种错误试完之后&#xff0c;我决定发一篇 sudo apt-get install mysql-…

Ubuntu 12.04安装firefox 26中的flash plugin方法

Ubuntu 12.04 64bit中安装firefox 26中的flash player插件的方法昨天, 有最新的firefox 26更新了,可是我在软件更新中无法下载到ubuntu官方源中的flash plugin,详细的情况可以参见如下网页,这个问题我一年前也遇到过,特记录下来,以备后来查阅.http://blog.sina.com.cn/s/blog_9…

内联式css样式,直接写在现有的HTML标签中

CSS样式可以写在哪些地方呢&#xff1f;从CSS 样式代码插入的形式来看基本可以分为以下3种&#xff1a;内联式、嵌入式和外部式三种。这一小节先来讲解内联式。 内联式css样式表就是把css代码直接写在现有的HTML标签中&#xff0c;如下面代码&#xff1a; <p style"col…

Linux下安装Java8

Linux(ubuntu)下Java8安装 1.下载jdk8 这个看大家了&#xff0c;linux版本的就可以 2.创建jvm文件夹 在根目录下创建名为jvm的文件夹&#xff08;在哪里创建看个人&#xff09; $ sudo mkdir jvm3.将下载的包解压到jvm文件夹下 $ sudo tar zxvf 压缩包路径/名字 -C /jvm…

RTMFP协议

RTMFP是Adobe公司开发的一套新的通信协议&#xff0c;该协议可以让使用Adobe Flash Player的终端用户之间进行直接通信。用Adobe AIR框架开发的程序也可以用此协议来发布直播、实时信息。  通过使用RTMFP, 那些原来直播、实时通信的应用&#xff0c;比如社区、音视频聊天和多人…

CodeForces 595A

题目链接&#xff1a; http://codeforces.com/problemset/problem/595/A 题意&#xff1a; 一栋楼&#xff0c;有n层&#xff0c;每层有m户&#xff0c;每户有&#xff12;个窗户&#xff0c;问这栋楼还有多少户没有睡觉&#xff08;只要一个窗户灯亮就代表这户没有睡觉&#x…

将Eclipse中Web项目打成war包

将Eclipse中Web项目打成war包 请按如下操作即可&#xff1a;

测试代码发布到博客效果(Windows Live Writer发布)

测试代码发布到博客效果(Windows Live Writer发布) public class SwitchCase {/*** 1、switch后面的表达式为常量表达式,类型只能是可以转化为int、enum(1.6)、String(1.7)的类型* 2、可以转化为int类型的数据类型有&#xff1a;byte、short、int、char* 3、boolean类型的数据类…

设置腾讯云linux服务器中 MySQL 允许远程访问

申请了一台linux腾讯云服务器&#xff0c;想要把数据库搭建在上面&#xff0c;本地的Windows直接可以访问 以下就是具体的操作流程&#xff0c;首先你需要安装好一个mysql&#xff0c;安装方法–>mysql安装(Linux) 接着就开始操作咯&#xff1a; 一、开启 MySQL 远程访问权…

js 判断js,css是否引入,确保不重复引入

js 判断js,css是否引入&#xff0c;确保不重复引入 (2009-10-31 21:33:44) 转载▼标签&#xff1a; 杂谈 分类&#xff1a; js基本原理&#xff1a;function loadjscssfile(filename, filetype){if (filetype"js"){ //if filename is a external JavaScript filev…

Ubuntu18彻底删除MySQL5.7数据库

首先在终端中查看MySQL的依赖项&#xff1a;dpkg --list|grep mysql (有或者没有都可以继续执行) 移除所有mysql公共依赖&#xff1a;sudo apt-get remove mysql-common 卸载&#xff1a;sudo apt-get autoremove --purge mysql-server-5.7 清除残留数据&#xff1a;dpkg -…

软件缺陷处理流程

今天&#xff0c;我们的主任研究了一下我出的软件缺陷处理流程&#xff0c;觉得不严谨&#xff0c;他重新梳理了一个&#xff0c;偶还是觉得自己梳理的比较直接&#xff0c;没有那么复杂。 这里博客记录&#xff0c;用于纪念我的心血&#xff0c;因为说不定哪天偶的这点心血会被…

Linux下tomcat的安装与卸载以及配置(超简单)

无敌简单的几步 1、安装 //首先你需要下载好tomcat包 sudo tar -xvzf apache-tomcat-7.0.85.tar.gz(这里是包名) -C 你要放的位置2、卸载 rm -rf 你的tomcat目录3配置&#xff1a; 进入目录/tomcat/apache-tomcat-8.5.51/bin&#xff0c;编辑文件startup.sh&#xff0c;在…

《创业维艰分享之五》所有得,有所乐,日事日清,循序渐进。

这两个月公司连续做了两个大客户紧接着发布新版本再然后又是连续五个小版本迭代计划。 每天16小时的超强度工作&#xff0c;我已经看到兄弟的脸上都写着一个字&#xff1a;累&#xff01; 我自己又何尝不是&#xff0c;既是客服&#xff0c;又是程序员&#xff0c;还必须是行政…

docker上你必须会的那些命令

一、基础类 查看docker信息 # 查看docker版本 docker version # 显示docker系统的信息 docker info # 日志信息 docker logs # 故障检查 service docker status # 启动关闭docker sudo service docker start|stop二、容器操作命令 1、创建删除容器 # 创建一个容器命名为 te…

iOS开发UI篇—transframe属性(形变)

iOS开发UI篇—transframe属性&#xff08;形变&#xff09; 1. transform属性 在OC中&#xff0c;通过transform属性可以修改对象的平移、缩放比例和旋转角度 常用的创建transform结构体方法分两大类 &#xff08;1&#xff09; 创建“基于控件初始位置”的形变 CGAffineTransf…

docker一步安装mysql,docker的魅力就在于此

正常来说&#xff0c;使用docker安装东西的步骤是serach它有没有&#xff0c;然后pull它 这里其实只要一步&#xff08;如果你没有安装过、没有端口占用等问题的话&#xff01;&#xff01;&#xff09; $ docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORDroo…

python-day05正则表达式

相关参考文档地址:http://bbs.fishc.com/thread-57073-1-1.html&#xff08;小甲鱼论坛&#xff09; 摘录老师之精华 re模块用于对python的正则表达式的操作。 字符&#xff1a; . 匹配除换行符以外的任意字符  \w 匹配字母或数字或下划线或汉字  \s 匹配任意的空白符  \…

Vim编辑器的常用快捷键.

Linux中的文本操作离不开Vim编辑器的使用. Vim编辑器的使用相对门槛较高.需要挺长一段时间的适应. 总结一些Vim使用过程中常用的命令(这些命令基本上都是在vim的命令模式下使用) 1.跳转到文本的开头gg 2.跳转到文本的末尾G (shiftg) 3.查看文本的总共有多少行(:set nu) 关于这个…

在docker上安装部署tomcat项目 超简单,拿来主义

在docker中部署tomcat&#xff0c;非常简单&#xff0c;而且省去了手动安装jdk等步骤&#xff0c;只需要将war包复制在容器tomcat实例中的webapps下面即可。以下将详细讲解流程&#xff1a; 在windows中打好包以后用winSPC拖放到linux系统中&#xff0c;我的直接放在了/home/ub…

docker停止、删除容器、删除镜像 一看就理解

当你的容器中出现问题&#xff08;比如我改坏了文件&#xff09;需要重新部署一台的时候&#xff0c;就需要将这个容器实例删除 接着&#xff1a; #查看当前的容器ID $ docker ps这里你会看到有两列id&#xff0c;一列是镜像id&#xff0c;一列是容器id&#xff0c;我们要分清…