在日常编码中,很多时候都要编写接受object作为参数的方法,接下来是将这些object转型成特定类型,要么类,要么接口。这时我们有两种选择,使用as操作符,或者使用强制类型转换。

正确的做法是,尽可能使用as操作符,因为相对强制转换来说,as更加安全,也更加高效。

例:

object o = Factory.GetObject();

MyType t = o as MyType;
if(t != null){
//转换成功
}else{
//转换失败
}

强制转换:

object o = Factory.GetObject();

try{
MyType t;
t = (MyType)o;
}catch(InvalidCastException){
//转换失败
}

显然第一种方法更加简单易读。其中并没有try/catch语句,因此也就避免了其带来的开销。

而且强制转换包括框架内建数值转换。例如:long类型强制转换为一个short类型,将会造成部分信息丢失。

需要注意的是,平常常用的foreach方法,也是内建强制类型转换。若使用非类型安全的泛型版本,则有可能会抛出InvalidCastException异常。

is和as也能作为简单的继承类型判断,若一个类型继承自目标类型,那么is操作符将返回true。

public class Child : Father
{ } Child child = new Child();
bool reuslt = child is Child;//true
bool reuslt = child is Father;//true
var obj = child as Child;//obj not null
var obj = child as Father;//obj not null

《C#高效编程》读书笔记03-推荐使用is或as操作符而不是强制类型转换的更多相关文章

  1. [读书笔记]Linux命令行与shell编程读书笔记03 文件系统等

    1. 文件系统的种类 ext ext2 ext3 ext4 JFS XFS 其中ext3 开始支持journal日志模式 与raid卡类似 有 数据模式  排序模式 以及回写模式 数据模式最安全 回写 ...

  2. CSAPP 并发编程读书笔记

    CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...

  3. 《深入了解java虚拟机》高效并发读书笔记——Java内存模型,线程,线程安全 与锁优化

    <深入了解java虚拟机>高效并发读书笔记--Java内存模型,线程,线程安全 与锁优化 本文主要参考<深入了解java虚拟机>高效并发章节 关于锁升级,偏向锁,轻量级锁参考& ...

  4. C++Windows核心编程读书笔记

    转自:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%96%87/71405.shtml "C++Windows核心编程读书笔 ...

  5. Node.js高级编程读书笔记Outline

    Motivation 世俗一把,看看前端的JavaScript究竟能做什么. 顺便检验一下自己的学习能力. Audience 想看偏后台的Java程序员关于前端JavaScript的认识的职业前端工程 ...

  6. python高级编程读书笔记(一)

    python高级编程读书笔记(一) python 高级编程读书笔记,记录一下基础和高级用法 python2和python3兼容处理 使用sys模块使程序python2和python3兼容 import ...

  7. 【编程开发】 C与C++中的关于函数指针的强制类型转换与指针函数的关系

    [编程开发] C与C++中的关于函数指针的强制类型转换与指针函数的关系 标签: [编程开发] [VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 以 ...

  8. unix环境高级编程-读书笔记与习题解答-第一篇

    从这周开始逐渐的进入学习状态,每天晚上都会坚持写c程序,并且伴随对这本书的深入,希望能写出更高质量的读书笔记和程序. 本书的第一章,介绍了一些关于unix的基础知识,在这里我不想去讨论linux到底是 ...

  9. MacTalk·人生元编程 - 读书笔记

    简介 <MacTalk·人生元编程>是一本随笔文集,主要内容来自作者的微信公众平台"MacTalk By 池建强".本书撰写于2013年,书中时间线却不止于此.作者以一 ...

随机推荐

  1. ObservableCollection和List的区别总结

    一.继承的类和接口,还有它们的方法不同 1)ObservableCollection比较简单,继承了Collection, INotifyCollectionChanged, INotifyPrope ...

  2. 使用SecureCRT工具部署项目

    总结下我的Java开发过程的一些知识点: 我要上线某个项目,此时我需要给测试人员发送安全扫描文件,等待测试人员完成项目的扫描之后才可以完成上线: 1 将项目打成war包.比如implgtyy.war文 ...

  3. 17_点击事件第四种写法_布局文件添加onclick属性

    尽量不要用第四种点击事件的写法.在一万多行代码中发现了一个没被调用的代码 public void call(View v){//第四种写法参数一定是View v //public void call( ...

  4. mac下已装virtualbox运行genymotion还报错找不到虚拟机的解决办法

    sudo ln -s /usr/local/bin/VBoxManage /usr/bin/VBoxManage  

  5. 5、预测和鉴定miRNA的靶基因

    转载:http://www.oebiotech.com/Article/mirnabjyyc.html http://www.ebiotrade.com/newsf/2014-9/2014925941 ...

  6. CodeForces 489D Unbearable Controversy of Being (不知咋分类 思维题吧)

    D. Unbearable Controversy of Being time limit per test 1 second memory limit per test 256 megabytes ...

  7. SQL Server中通过设置非聚集索引(Non-Clustered index)来达到性能优化的目的

    首先我们一下,在SQL Server 2014 Management Studio中,如何为一张表设置Non-Clustered index 具体可以参考  https://docs.microsof ...

  8. win7 64位安装nokia 920驱动

    折腾了很长时间,终于安装成功,先将一些步骤记下来,此方法适用于哪些网上常规方法无法安装驱动的: 需要注意920不要连到电脑上的USB3.0接口,相关文件下载地址:http://pan.baidu.co ...

  9. nodebrew

    创建: 2019/05/30 完成: 2019/05/30  安装  安装 curl -L git.io/nodebrew | perl - setup 更新nodebrew nodebrew sel ...

  10. 飘逸的python - @staticmethod和@classmethod的作用与区别

    一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用. 这有利于组织代码,把某些应 ...