博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Effective C#》读书笔记——条目3:推荐使用is或as而不是强制转换类型<C#语言习惯>...
阅读量:5324 次
发布时间:2019-06-14

本文共 830 字,大约阅读时间需要 2 分钟。

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

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

  或者可以使用更保险的做法,首先用测试一下,能否转换成功,然后再使用或者强制类型转换。在大部分情况下,我们应该尽可能的使用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而不是强制类型转换,因为强制类型转换可能会带来意想不到的负面效应,而且成功或失败往往在我们的预料之外。

 

阅读书目:

扩展阅读:

转载于:https://www.cnblogs.com/IPrograming/archive/2012/08/21/Effective_CSharp_03.html

你可能感兴趣的文章
[Javascript] Flattening nested arrays: a little exercise in functional refactoring
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
windows编程ASCII问题
查看>>
.net webService代理类
查看>>
Code Snippet
查看>>
Node.js Express项目搭建
查看>>
zoj 1232 Adventure of Super Mario
查看>>
Oracle 序列的应用
查看>>
1201 网页基础--JavaScript(DOM)
查看>>
组合数学 UVa 11538 Chess Queen
查看>>
oracle job
查看>>
Redis常用命令
查看>>
EFCode First 导航属性
查看>>
XML学习笔记(二)-- DTD格式规范
查看>>
git 的回退
查看>>
IOS开发学习笔记026-UITableView的使用
查看>>
Confluence配置数据库
查看>>
Java锁机制(一)synchronized
查看>>
002.文件删除功能
查看>>