C#中is 运算符与as运算符的区别和作用
C#中is 运算符与as运算符的区别和作用
C#中is 运算符与as运算符的区别和作用Is:检查对象是否与给定的类型兼容。例如,下面的代码可以确定MyObject类型的一个实例,或者对象是否从MyObject派生的一个类型:
如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,则 is 表达式的计算结果将是 true。
如果已知表达式始终是true或始终是false,则is关键字将导致编译时警告,但是通常在运行时才计算类型兼容性。
注意:is运行符不能重载,is运行符只考虑引用转换、装箱转换和取消装箱转换。不考虑其它转换,如果用户定义转换。
在Is运算符的左侧不允许使用匿名方法。lambda表达式属于例外。
如果对象引用是null,is运算符总是返回false,因为没有可检查其类型的对象。
is运算符实例:
Object myObject = new Object();
Boolean b1 = (myObject is Object); //b1=true.
Boolean b2 = (myObject is Employee); //b2=false.
//is运算符通常像下面这样使用:
if (myObject is Employee)
{
Employee myEmployee = (Employee)myObject;
}
as:用于检查在兼容的引用类型之间执行某些类型的转换。
实例:
Employee myEmployee = myObject as Employee; if (myEmployee != null){ } Object o = new Object(); //新建一个Object对象 Employee e = o as Employee; //将o转型为一个Employee //上述转型操作会失败,不会抛出异常,但e会被设为null e.ToString(); //访问e会抛出一个NullReferenceException
在上面这段代码中,CLR核实myObject是否兼容于Employee类型;如果是,as会返回对同一个对象的一个非null的引用。如果myObject不兼容于Employee类型,as运算符会返回null。
注意:as运算符造成CLR只校验一次对象的类型。if语句只是检查myEmployee是否为null。这个检查的速度比校验对象的类型快得多。
as运算符的工作方式与强制类型转换一样,只是它永远不会抛出一个异常。相反,如果对象不能转换,结果就是null。所以,正确的做法是检查最终生成的一引用是否为null。如果企图直接使用最终生成的引用,会抛出一个System.NullReferenceException异常。
as运算符类似于强制转换操作。但是无法进行转换,则as返回null而非引发异常。
注意:as运算符只执行引用转换和装箱转换。as运算符无法执行其它转换,如果用户定义的转换,这类转换应使用强制转换表达式来执行。
- C#匿名类
- C#中的属性、和字段的区别
- C#选择排序
- C# this扩展方法
- c#中SqlBulkCopy的使用
- C#中Nullable<T>
- C# Task实现多线程
- C# 扩展方法
- C#中ToDictionary,ToLookup
- 数据库字段类型对应C#数据类型
- C# Windows服务的创建、安装、调试
- C#中==、Equals、ReferenceEquals的区别
- C#类的访问修饰符
- C# #define条件编译
- C# xml和对象的序列化与反序列化
- C#中抽象类和接口的区别有哪些
- 赵丽颖第一部当女主的戏,主角配角个个都是实力演员(赵丽颖第一部当女主的戏)
- 乾隆为何这么喜爱白塔原因是什么(乾隆为何这么喜爱白塔原因是什么)
- 逐渐消失的东北八大怪现象,进步的社会里我们遗失的是什么(逐渐消失的东北八大怪现象)
- 今日大雪,大雪养生这样做,一年都有好气色(大雪养生这样做)
- 粗盐是什么 粗盐的功效与作用(粗盐的功效与作用)
- 会 吃人 的客机 从天堂到地狱只需5分钟,图-104如何做到(会吃人的客机)
热门推荐
- label for属性
- tomcatxml文件放在哪(Tomcat中修改server.xml和content.xml后自动还原问题解决)
- html markdown 超链接对比(html+js 实现markdown编辑器效果)
- mysql命令输入行在哪(MySQL命令行操作时的编码问题详解)
- mysql统计函数详解(浅析MySQL的基数统计)
- html5中提供的绘图元素(使用Html5中的cavas画一面国旗)
- python使用telnet(python 处理telnet返回的More,以及get想要的那个参数方法)
- dockermysql实例(docker 连接宿主Mysql操作)
- htop命令使用教程(.htaccess使用方法总结)
- ExtJs中XTemplate使用