《Effective C#》读书笔记——条目3:推荐使用is或as而不是强制转换类型<C#语言习惯>-阿里云开发者社区

开发者社区> 安全> 正文

《Effective C#》读书笔记——条目3:推荐使用is或as而不是强制转换类型<C#语言习惯>

简介:

  C#是强类型语言,在开发过程中类型之间的相互转化是一种很常见的场景。C#为类型转换提供两种选择:

  • 1.使用as操作符
  • 2.使用强制类型转换

  或者可以使用更保险的做法,首先用is测试一下,能否转换成功,然后再使用as或者强制类型转换。在大部分情况下,我们应该尽可能的使用as操作符:

因为相对于强制类型转换来说,as更安全,也更加高效。as和is操作符都不会执行任何用户自定义的转换,它们仅当运行时类型符合目标类型时才能转换成功,也不会在转换时创建新的对象。

 

使用as或is的优势

  •   如果无法进行转换,则 null 而非引发异常,只需要检查返回的引用是否为null即可,避免了异常处理带来的开销。
  •   使用as操作符转换对象为null时返回null,如果使用强制转换的方式null可以被转换成任意的引用类型。

 

as操作符的限制

  •   as操作符不能配合值类型使用,因为它们永远都不可能为null。

  

is操作符的使用

  •   在不确定的强制类型转换中使用异常来控制程序流是一个很糟糕的做法,在转换之前我们可以使用is来避免冒出异常或转换。
  •   当不能使用as进行转换时,才应该使用is操作符。否则is是多余的;因为使用as操作符只需要检查是否为null即可,这样更加简单。

 

小结:

  好的面向对象实践一般都告诉我们要避免转型,但有时侯你却别无选择。在无法避免转型时,我们应该尽可能的使用as和is操作符来更清晰的表达意图。不同的转型方式有不同的规则,is和as操作符在绝大多数情况下都能表达出正确的语义,只有当被测试的对象时正确的类型时才会成功。应尽量选择is和as而不是强制类型转换,因为强制类型转换可能会带来意想不到的负面效应,而且成功或失败往往在我们的预料之外。

 

阅读书目:《Effective C#》

扩展阅读:如何:使用 as 和 is 运算符安全地进行强制转换(C#编程指南)

本文转自gyzhao博客园博客,原文链接:http://www.cnblogs.com/IPrograming/archive/2012/08/21/Effective_CSharp_03.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
+ 订阅

云安全开发者的大本营

其他文章