博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
is和as操作符
阅读量:5262 次
发布时间:2019-06-14

本文共 2362 字,大约阅读时间需要 7 分钟。

在C#语言中一个对象进行类型判断,使用操作符is和as。is和as都是强制类型转换,但具体还是有区别的,今天初次接触,在此分享下:


Is操作符:

C#中用is操作符验证对象的类型是不是自己希望的。
is操作符取两个操作数:左边是对对象引用,右边是类型名称。如果左边的对象是右边的类型,则is表达式的求值结果为true,反之为false。
验证如下:分为3个示例

//People是随意定义的一个类            People p = new People();            bool b = p is People;            Console.WriteLine("p is People=" + b);            if(b){ //这里显然是可以转换的,b为true                People p2 = p;                Console.WriteLine(p2);            }            Console.WriteLine("--------------2-----------------");            //定义一个Object类            Object obj = new Object();            bool b2 = obj is People;//这里显然是不可以转换的,b2为false            Console.WriteLine("obj is People=" + b2);            if (b2)            {                People p2 = (People)obj;            }            else {                Console.WriteLine("obj is not People");            }            Console.WriteLine("--------------3-----------------");            bool b3 = null is People;            Console.WriteLine(b3);

这里写图片描述

在第一个示例中,引用对象p是类型对象People的类型是is操作符给予true值,然后再去做类型转换操作People p2 = p;,转换用了两次,是消耗性能的。
在第二个示例中,引用对象obj是Object类型不是People类型,is操作符会给一个false值,不会再去做类型转换操作。
在第三个示例中,引用对象为null,不是People类型,is操作符给一个false值,这个算是特殊情况。


As操作符

as操作符充当了和is操作符类似的角色,只是功能稍微进行了删减。
和is操作符一样,as操作符取对象和类型作为左右操作数。“运行时”尝试将对象转换成指定类型。若转换成功,就直接返回转换成功的结果,而不需要第二次类型转换,这里性能效率会高于is操作符。
验证如下:依旧分为3个示例

People p = new People();            People p2 = p as People;//这里显然p是People类型,p2不会为null,会为People类型            if (p2 != null)            {                Console.WriteLine(p2);            }            else {                Console.WriteLine("p is not People");            }            Console.WriteLine("--------------2-----------------");            Object obj = new Object();            People p3 = obj as People;//这里显然obj不是People类型,p3会为null,不会为People类型            if (p3 != null)            {                Console.WriteLine("obj is People");            }            else {                Console.WriteLine("obj is not People p3的值为"+p3);            }            Console.WriteLine("--------------3-----------------");            People p4 = null as People;//p4为null            Console.WriteLine(p4);

这里写图片描述

在第一个示例中,引用对象p是类型对象People的类型是as操作符做类型转换操作p2 被赋为People类型,相比is操作符,节约了性能。
在第二个示例中,引用对象obj是Object类型不是People类型,as操作符会给p3赋为null值。
在第三个示例中,引用对象为null,不是People类型,as操作符给一个null值,这个算是特殊情况。

转载于:https://www.cnblogs.com/wangqilong/p/9417510.html

你可能感兴趣的文章
Dictionary及KeyValuePair使用
查看>>
获取星期几
查看>>
Android高手进阶必备 (一)
查看>>
ios 弹出键盘 视图向上平移
查看>>
软件工程网络15个人阅读作业2-提出问题
查看>>
EF CodeFirst 实例Demo
查看>>
VB使用ADO中recordeset.delete删除数据记录问题
查看>>
Jquery dialog属性
查看>>
Java多线程总结
查看>>
Bitmap Basics - A GDI tutorial
查看>>
java io流 对文件操作
查看>>
VS2010+PCL+openni配置
查看>>
图像颜色--opencv scalar
查看>>
JavsScript中的Document对象
查看>>
springboot+mybatis+shiro——登录认证和权限控制
查看>>
CDZSC_2015寒假新人(2)——数学 - G
查看>>
20145305 《信息安全系统设计基础》课程总结
查看>>
myeclipse 配置 tomcat7
查看>>
Linux中编译或安装程序时提示No such file or directory
查看>>
Java解析Excel之POI(二):解决 xls 和 xlsx 两种格式解析时的差异统一处理
查看>>