zoukankan      html  css  js  c++  java
  • what AS and Is are?

      今天看了AnyTao博客上 -------[你必须知道的.NET] 第一回:恩怨情仇:is和as ,通过MSDN,对As 和Is在C#里的用法来了个深刻的理解,现总结一下,和园子里朋友共享。
      先引用AnyTao的解释:比较好,
          
    Hereis的规则如下:
    • 检查对象类型的兼容性,并返回结果,true或者false;
    • 不会抛出异常;
    • 如果对象为null,则返回值永远为false。

    as的规则如下:

    • 检查对象类型的兼容性,并返回结果,如果不兼容就返回null;
    • 不会抛出异常;
    • 如果结果判断为空,则强制执行类型转换将抛出NullReferenceException异常。


    我对“is/as操作符,提供了更加灵活的类型转型方式,但是as操作符在执行效率上更胜一筹”不太理解.......
    在MSDN上search了一下,

     
    As
    as(C# 参考)

    用于在兼容的引用类型之间执行转换。例如:

    string s = someObject as string;
    if (s != null)
    {
        
    // someObject is a string.
    }
    as 运算符类似于强制转换操作;但是,如果转换不可行,as 会返回 null 而不是引发异常。更严格地说,这种形式的表达式

          expression as type

    equal to------>

          expression is type ? (type)expression : (type)null

    只是 expression 只被计算一次。

    注意,as 运算符只执行引用转换和装箱转换。as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用 cast 表达式来执行

    Is
    is(C# 参考)

    检查对象是否与给定类型兼容。例如,可以确定对象是否与 string 类型兼容,如下所示:

    if (obj is string)
    {
    }

    如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,则 is 表达式的计算结果将是 true

    如果已知表达式将始终是 true 或始终是 false,则 is 关键字将导致编译时警告,但是,通常在运行时才计算类型兼容性。

    不能重载 is 运算符。

    请注意,is 运算符只考虑引用转换、装箱转换和取消装箱转换。不考虑其他转换,如用户定义的转换。

      现在清晰多了,呵呵。
  • 相关阅读:
    神马搜索 面试小结
    我的第一篇paper
    【转载】技巧:Vim 的纵向编辑模式
    实习求职小结
    将博客园界面打造成Hexo经典主题Light
    试一下Markdown
    四色标记算法
    射雕三部曲的优美片段
    Docker
    Sublime Text 3 文档
  • 原文地址:https://www.cnblogs.com/tianqing/p/1128783.html
Copyright © 2011-2022 走看看