as和Is优与强类型

来自:Effective C#

  as和Is优与强类型,前者只检查被转换对象的运行时类型,并不执行其它的操作.当结果与Null作比较即可.而后者不仅要使用try---catch来捕获异常而且还要与NULL作比较.对于用户定义的转换操作符只作用于对象的编辑时类型.而非运行时类型上.比如:t=(mytype)st,如果st的声名类型不同,会有不同的行为.但对于t=t as mytype 则转型的结果相对比较一致.但是AS不能应用于值类型.因为值类型不可能为NULL,所以只能使用强类型了.但是我们可以使用IS不避免其中对异常的检查或强制转换.即先用is来进行判断,然后再使用强类型转换.只有当我们不能使用AS时才使用is操作符,否则会带来代码 的冗余.如下所示:

Code

上面的代码和下面的代码是一样的.正确但是冗余.

Code

这种做法不是高效的.如果想用AS来做转型,就不要再使用IS了.

但是对于foreach循环语句中使用的类型只能是强类型了,因为foreach语句需要同时支持值类型和引用 类型.

    

posted @ 2009-02-26 11:17  幽境仼孓  阅读(184)  评论(0编辑  收藏  举报