zoukankan      html  css  js  c++  java
  • 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值,这个算是特殊情况。

  • 相关阅读:
    HYSBZ 3813 奇数国
    HYSBZ 4419 发微博
    HYSBZ 1079 着色方案
    HYSBZ 3506 排序机械臂
    HYSBZ 3224 Tyvj 1728 普通平衡树
    Unity 3D,地形属性
    nginx 的naginx 种包含include关键字
    Redis 出现NOAUTH Authentication required解决方案
    mysql 8.0出现 Public Key Retrieval is not allowed
    修改jar包里的源码时候需要注意的问题
  • 原文地址:https://www.cnblogs.com/wangqilong/p/9417510.html
Copyright © 2011-2022 走看看