C#中"is" vs "as"

简介:

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

             if (cls1  is Class2) 
             {
                Class2 cls2 = (Class2)cls1;
            }

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

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

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


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


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

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


本文转自风前絮~~博客园博客,原文链接:http://www.cnblogs.com/windsails/archive/2004/09/16/43654.html,如需转载请自行联系原作者

相关文章
|
IDE C# 开发工具
一个开源轻量级的C#代码格式化工具(支持VS和VS Code)
一个开源轻量级的C#代码格式化工具(支持VS和VS Code)
619 6
|
开发框架 .NET 数据库
asp.net企业费用报销管理信息系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
asp.net 企业费用报销管理信息系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使 用c#语言开发 应用技术:asp.net c#+sqlserver 开发工具:vs2010 +sqlserver
374 0
|
开发框架 .NET C#
【C#编程最佳实践 十四】VS调试最佳实践
【C#编程最佳实践 十四】VS调试最佳实践
219 0
|
Java C# C语言
【.Net vs Java? 】 先来看一下Java和C#的数据类型区别。
新工作.Net和Java都要做,早期也做过一段Java的项目,但没有系统的深入学习过。一直觉得这两门语言估计是最相近的两门语言了,好多代码可以说直接拷过来都不带报错的,但仔细推敲还是有很多的不同。
330 0
【.Net vs Java? 】 先来看一下Java和C#的数据类型区别。
|
安全 Java C#
一起谈.NET技术,C# VS Java
  一、C#、C++和Java   C#的语言规范由Microsoft的Anders Hejlsberg与Scott Wiltamuth编写。在当前Microsoft天花乱坠的宣传中,对C#和C++、Java作一番比较总是很有趣的。
1295 0
|
C# C++
VS中实时获取SVN的版本号并写入到AssemblyInfo.cs中(C#)
原文:VS中实时获取SVN的版本号并写入到AssemblyInfo.cs中(C#) 在开发项目时,需要知道当前发布的到底是哪个版本,比较好的方式就是获取SVN的版本来作为项目的版本。
2462 0
|
C# 数据库 C++
VS中C#连接SQLite数据库处理器架构“x86”不匹配的问题
原文链接 https://www.cnblogs.com/zhaoliankun/p/9088200.html 我的环境配置:windows 64,VS,SQLite(点击下载),System.Data.SQLite.DLL(点击下载)。
2241 0
|
数据库连接 数据库 数据安全/隐私保护
C#Vs关于连接数据库的语句
App.config的配置: 数据库连接的是云服务器 //数据库连接字符串(web.
1391 0