• is和as操作符


    在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值,这个算是特殊情况。

  • 相关阅读:
    今天是清明节假期的最后一天
    昨天晚上在舅舅家吃饭,得知已经做完肾结石手术
    在今天上午第三节课上完后,下课找了韩请假的事情
    早上把书本和桌子放在一起,下午12:00就要出发
    今天居然在谎称支付宝又返现2元
    今天居然在谎称支付宝又返现2元
    Spring IOP 没用
    面试题:搜狐百度 看1 复杂一点的面试题 笔试题
    项目一:第六天 WebService写接口 和CXF框架
    项目一:第七天 CRM 和bos系统实现定区关联客户,关联快递员. 通过CXF框架实现
  • 原文地址:https://www.cnblogs.com/wangqilong/p/9417510.html
Copyright © 2020-2023  润新知