• 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 运算符只考虑引用转换、装箱转换和取消装箱转换。不考虑其他转换,如用户定义的转换。

      现在清晰多了,呵呵。
  • 相关阅读:
    前端开发拥有属于自己的云服务器能做什么?
    C语言编译、链接和运行详解
    C程序运行机制概述
    Java之顺序查找
    C语言注释
    C转义字符
    Java之二维数组基本使用
    Java之类与对象基本使用
    分享些发表技术类文章的平台
    解决蓝奏云链接无法访问问题
  • 原文地址:https://www.cnblogs.com/tianqing/p/1128783.html
Copyright © 2020-2023  润新知