zoukankan      html  css  js  c++  java
  • C# -- is和as运算符

      一、is运算符用于判断一个对象是否可以转换为指定的类型,不会抛出异常,返回bool值用来表示是否转换成功:

    if (myObj is MyClass)
    {
        //do...
    }

      当满足以下任意一种情况时转换成功:

      1.转换对象是目标类型的实例;

      2.转换对象是派生自目标类型的类型的实例;

      3.转换对象是实现目标接口的类型的实例;

      在C#7.0以上版本中支持is模式匹配表达式和switch模式匹配表达式;

      二、as运算符与强制转换类似,但不会抛出异常,如果转换不成功,会返回null,通常搭配判空操作一起使用:

    MyClass myObj = obj as MyClass;
    if (myObj != null)
    {
        //do...
    }

      1.as运算符仅可以用于目标类型为引用类型或可空类型的类型转换操作,在转换时一般不会创建新的对象(如果原对象为值类型且目标类型为引用类型,转换成功时则会产生装箱操作,产生新对象);对于目标类型为非可空类型的值类型,可以使用is运算符配合强制转换进行转换:

    if (myObj is int)
    {
        int myNum = (int)myObj;
        //do...
    }

      ※在泛型中,如果需要使用as运算符将对象转换为类型参数的类型,需要添加基类约束或类类型的约束:

    where T : BaseClass //指定基类约束
    where T : class //指定类类型约束

      2.is和as运算符都不会执行自定义的类型转换(此时应该使用强制转换),它们仅当被转换对象的运行时类型符合目标类型转换规则时(即上面的几种情况)才能转换成功;

      ※较于强制转换,应该尽可能的使用as运算符,因为使用as运算符进行转换更加安全,也更加高效;


    如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的认可是我写作的最大动力!

    作者:Minotauros
    出处:https://www.cnblogs.com/minotauros/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    [LeetCode] 1898. Maximum Number of Removable Characters
    [LeetCode] 1897. Redistribute Characters to Make All Strings Equal
    [LeetCode] 1400. Construct K Palindrome Strings
    235. 二叉搜索树的最近公共祖先
    349. 两个数组的交集
    海量数据TOPK 问题
    121. 买卖股票的最佳时机
    删除数组中为0元素
    这行字符串中出现频率最高的字符
    50. Pow(x, n)
  • 原文地址:https://www.cnblogs.com/minotauros/p/11614106.html
Copyright © 2011-2022 走看看