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/

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

  • 相关阅读:
    【java】一种自动生成数据库文档的方法
    sublime vintage mode 按住一个键(比如 j)不会重复的问题
    SQL Service服务更换帐户后无法启动的情况(Security 4625 Type 5)
    隐藏的计划任务运行,导致账户被锁的调查方法
    nodejs 热更新页面
    数组转tree arrToTree
    compose函数
    react 类组件的生命周期
    qiankun 微应用demo
    application 'xxx' died in status LOADING_SOURCE_CODE: [qiankun] You need to export lifecycle functions in xxx entry
  • 原文地址:https://www.cnblogs.com/minotauros/p/11614106.html
Copyright © 2011-2022 走看看