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

  • 相关阅读:
    LeetCode(287)Find the Duplicate Number
    LeetCode(290) Word Pattern
    LeetCode(205)Isomorphic Strings
    LeetCode(201) Bitwise AND of Numbers Range
    LeetCode(200) Number of Islands
    LeetCode(220) Contains Duplicate III
    LeetCode(219) Contains Duplicate II
    命令行执行Qt程序
    LeetCode(228) Summary Ranges
    redis 的安装和使用记录
  • 原文地址:https://www.cnblogs.com/wangqilong/p/9417510.html
Copyright © 2011-2022 走看看