C#中"is" vs "as"

原创 2004年09月16日 12:19:00

 在数据类型转换中,C#相对其它语言来说是比较严格的,要求显式进行数据转化。
        为了操作方便,C#也提供了一种is操作符进行转换,十分方便,它自动检查时局是否和类型兼容,并返回结果。而且它不会抛出异常。如果对象引用为null,则is总返回false。
 

None.gif            if (cls1 is Class2) 
ExpandedBlockStart.gif            
{
InBlock.gif                Class2 cls2 
= (Class2)cls1;
ExpandedBlockEnd.gif            }

None.gif            
else
None.gif                System.Console.WriteLine(
"Error 2!");

         平时自己也多用这种方式来做类型转化的,但今天看了个文章,对比了另外一种方式,as操作符进行转换,才知道as比is可以稍微地提高性能的。

None.gif            Class2 cls2 = cls1 as Class2;
None.gif            
if (cls2!=null)
None.gif               System.Console.WriteLine(
"Ok");
None.gif            
else
None.gif               System.Console.WriteLine(
"Error!");
None.gif

as稍微不同,它检查引用对象是否兼容,如果不兼容则返回null,因此需要做null的判断。


        对比两种方式,is需要做两次对象的类型检查,而as需要做一次对象类型检查,再加一次null的检查,而null检查开销比对象类型检查少。相对as的方法效率高些。

        看来日常写的一些习惯性的代码总可以找到改进的地方的,将新的方式再作为习惯不是更好?

在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试

在VS2015中用C++创建DLL并用C++或C#调用且同时实现对DLL的调试
  • songyi160
  • songyi160
  • 2016年04月06日 17:59
  • 12984

VS编写代码的四种注释(C#),让编程轻而易举

随着开发的不断深入,随着开发人员的增加,随着开发人员的各种编码风格,如果没有注释,则不同编码人员就很难进行沟通和交流。 注释就像一本书中的前言,这本书对自己有没有帮助,看完前言就知道,这段代码对自己有...
  • u012354475
  • u012354475
  • 2015年05月13日 17:46
  • 1987

vs2015 自定义类模板的方法

第一步:找到模板文件 路径:C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\ItemTemplates\CSharp\...
  • new_smile
  • new_smile
  • 2016年08月04日 11:05
  • 3052

如何在没有装VS(Visual Studio)的机器上编译运行C#程序

马上就要过年了,每年过年都要回老家,使用电脑和网络就没有这边这么方便了。想写程序了,都没有一台带Visual Studio的机器,我也不可能给每台机器都安装一个Visual Studio,怎么办呢? ...
  • shl7765856
  • shl7765856
  • 2014年04月14日 11:50
  • 5742

vs 提示图标的含义

提示图标 中英文含义" style="border-top-style:none; border-right-style:none; border-bottom-style:none; border-...
  • zhou349398998
  • zhou349398998
  • 2014年03月17日 17:20
  • 1793

关闭大纲显示,C# vs2013 编辑器左侧代码折叠功能

关闭大纲显示,C# vs2013 编辑器左侧代码折叠功能   步骤如下:
  • enwei
  • enwei
  • 2015年04月07日 09:38
  • 1766

VS2010环境下C#如何建立与SQLServer的连接并获取数据

如何在.net环境下,用C#编程语言建立与SQLServer数据库的连接并且从中获取数据恐怕是刚接触C#的人们遇到的问题了,这个问题其实很简单,但是网络上各种东拼西凑的文章让人眼花缭乱。自己从事软件开...
  • DouDou2014
  • DouDou2014
  • 2016年03月02日 13:32
  • 6981

在VS开发中,Windows Form中的构造函数跟Form1.Load()有什么区别和联系

1、任何一个类都会有构造函数,即使你没有写编译器也会隐式生成默认无参数构造函数,要调用一个类的任何方法(包括静态方法,静态方法会实例化一次静态构造),都会先调用构造函数(一个类的静态实例化在整个进程周...
  • guoheng123456
  • guoheng123456
  • 2015年12月11日 10:23
  • 635

C# 版本和.NET 版本以及VS版本的对应关系

https://en.wikipedia.org/wiki/C_Sharp_(programming_language)#Versions   http://stackoverfl...
  • my98800
  • my98800
  • 2017年04月07日 08:24
  • 2118

VS2010命令行编译C#和VC项目

原文链接:http://blog.sina.com.cn/s/blog_45eaa01a0101ew24.html S2010命令行编译C#和VC项目   根据需要动态创建数据库字段后,需要动...
  • noble007
  • noble007
  • 2015年12月25日 11:37
  • 1116
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#中"is" vs "as"
举报原因:
原因补充:

(最多只允许输入30个字)