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

  现在清晰多了,呵呵。
原文地址:https://www.cnblogs.com/tianqing/p/1128783.html