C#中is、as的区别
一、C#类型的转换
在c#中类型的转换分两种:显式和隐式,基本的规则如下:
1、基类对象转化为子类对象,必须显式转换,规则:(类型名) 对象。
2、值类型和引用类型的转换采用装箱(boxing)或拆箱(unboxing).
3、子类转化为基类对象。
4、基本类型互相之间转化可以用Covent类来实现。
5、字符串类型转换为对应的基本类型用Parse方法,除了String类型外其他的类型都可以用Parse方法。
6、用GetType可以取得对象的精确类型。
7、子类转化为基类,采用隐式转换。
二、C#中的is
检查一个对象是否兼容于其他指定的类型,并返回一个Bool值,如果一个对象是某个类型或是其父类型的话就返回为true,否则的话就会返回为false。永远不会抛出异常
如果对象引用为null,那么is操作符总是返回为false,因为没有对象可以检查其类型。
例如
object o = new object();
if (o is Label)
{
Label lb = (Label)o;
Response.Write("类型转换成功");
}
else
{
Response.Write("类型转换失败");
}
三、C#中as的转换规则
1、检查对象类型的兼容性,并返回转换结果,如果不兼容则返回null;
2、不会抛出异常;
3、如果结果判断为空,则强制执行类型转换将抛出NullReferenceException异常;
4、用as来进行类型转换的时候,所要转换的对象类型必须是目标类型或者转换目标类型的派生类型
例如
object o = new object();
Label lb = o as Label;
if (lb == null)
{
Response.Write("类型转换失败");
}
else
{
Response.Write("类型转换成功");
}
使用as操作符有如下几点限制
第一个就是,不用在类型之间进行类型转化,即如下编写就会出现编译错误。
NewType newValue = new NewType();
NewType1 newValue = newValue as NewType1;
第二个就是,不能应用在值类型数据,即不能如下写(也会出现编译错误)。
object objTest = 11;
int nValue = objTest as int;
四、as与is的区别
1、AS在转换的同事兼判断兼容性,如果无法进行转换,则 as 返回 null(没有产生新的对象)而不是引发异常。有了AS我想以后就不要再用try-catch来做类型转换的判断了。因此as转换成功要判断是否为null。
2、AS是引用类型类型的转换或者装箱转换,不能用与值类型的转换。如果是值类型只能结合is来强制转换
3、IS只是做类型兼容判断,并不执行真正的类型转换。返回true或false,不会返回null,对象为null也会返回false。
4、AS模式的效率要比IS模式的高,因为借助IS进行类型转换的化,需要执行两次类型兼容检查。而AS只需要做一次类型兼容,一次null检查,null检查要比类型兼容检查快。
五、在进行类型转换的时候,可以按照如下的方式进行选择
1、Object => 已知引用类型
使用as操作符来完成
2、Object => 已知值类型
先使用is操作符来进行判断,再用类型强转方式进行转换
3、已知引用类型之间转换
首先需要相应类型提供转换函数,再用类型强转方式进行转换
4、已知值类型之间转换
最好使用系统提供的Convert类所涉及的静态方法
六、(int)和Int32.Parse(),Convert.ToInt32()三者的区别
1、(int)转换:用在数值范围大的类型转换成数值范围小的类型时使用,但是如果被转换的数值大于或者小于数值范围,则得到一个错误的结果,利用这种转换方式不能将string转换成int,会报错。
2、Int32.Parse()转换:在符合数字格式的string到int类型转换过程中使用,并可以对错误的string数字格式的抛出相应的异常。
3、Convert.ToInt32()转换:使用这种转换,所提供的字符串必须是数值的有效表达方式,该数还必须不是溢出的数。否则抛出异常。
C#中is、as的区别的更多相关文章
- 正则匹配中 ^ $ 和 \b 的区别
正则匹配中 ^ $ 和 \b 的区别 ^和$分别代表字符串的开始和结束,因此^\d$只能匹配包含一个数字的字符串\b代表单词边界,其前后必须是不同类型的字符,可以组成单词的字符为一种类型,不可 ...
- java中ArrayList 、LinkList区别
转自:http://blog.csdn.net/wuchuanpingstone/article/details/6678653 个人建议:以下这篇文章,是从例子说明的方式,解释ArrayList.L ...
- 数据库中MyISAM与InnoDB区别
数据库中MyISAM与InnoDB区别 首页 » DIY技术区 » 数据库中MyISAM与InnoDB区别 09:57:40 MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是I ...
- socket网络编程中read与recv区别
socket网络编程中read与recv区别 1.read 与 recv 区别 read 原则: 数据在不超过指定的长度的时候有多少读多少,没有数据则会一直等待.所以一般情况下:我们读取数据都需要采用 ...
- 详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别
详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别 http://blog.sina.com.cn/s/blog_686999de0100jgda.html 实例: ...
- java 中 ==和equals 的区别
Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolea ...
- java中equals和==的区别 (转)
java中equals和==的区别 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...
- JSP中pageEncoding和charset区别,中文乱码解决方案(转载)
转载自:JSP中pageEncoding和charset区别,中文乱码解决方案 JSP指令标签中<%@ page contentType="text/html;charset=GB23 ...
- lua 中pairs 和 ipairs区别
lua 中pairs 和 ipairs区别 标准库提供了集中迭代器,包括迭代文件每行的(io.lines),迭代table元素的(pairs),迭代数组元素的(ipairs),迭代字符串中单词的 (s ...
- 关于EF中ApplyCurrentValues和ApplyOriginalValues区别
关于EF中ApplyCurrentValues和ApplyOriginalValues区别:两者都是编辑数据时使用. // // 摘要: // 将 System.D ...
随机推荐
- Mysql 流程控制
流程控制 分支结构 if分支结构 语法: if 条件then -- 语句体 else -- 缺省语句体 end if; 示例: 循环结构 whi ...
- Openjudge/Poj 1183 反正切函数的应用
1.链接地址: http://bailian.openjudge.cn/practice/1183 http://poj.org/problem?id=1183 2.题目: 总时间限制: 1000ms ...
- asp.net导出excel较为简约的代码
ds为数据源 Response.Buffer = true; Response.AppendHeader("Content-Disposition", "attachme ...
- CentOS上无法识别NTFS格式分区的解决方法
插入U盘之后,按照下面的步骤: # fdisk -l /dev/sd* 通常这一步就能找到U盘,如果U盘有指示灯也会亮,表示被找到. # mount –t ntfs /dev/sdb1 /mnt/ ...
- 简单重置Centos服务器中Mysql的root密码
1.编辑MySQL配置文件my.cnf vi /etc/my.cnf #编辑文件,找到[mysqld],在下面添加一行skip-grant-tables [mysqld] skip-grant-tab ...
- memcached全面剖析--5
memcached的应用和兼容程序 mixi案例研究 mixi在提供服务的初期阶段就使用了memcached. 随着网站访问量的急剧增加,单纯为数据库添加slave已无法满足需要,因此引入了memca ...
- 自定义MVC路由配置
首先我用MVC4新增一个订单查看的功能 1.创建控制器OrderController namespace MvcApplication3.Controllers { public class Orde ...
- C#委托的语法
using System;using System.Collections.Generic;using System.Linq;using System.Text;using Delegate; na ...
- 关于博客名“大话济公”的说明
其实本来没打算起这个名字的,换了几个名字都被占用了(无语啊...).最近呢,我在研究<济公传>,对于济公的传说比较喜欢,尤其是这个任务,诙谐幽默,同时有时时刻刻在帮助有困难的群众,虽然是个 ...
- JAVA TCP/IP Socket通信机制以及应用
关于局域网通信(同一wifi下,自己电脑当服务端,同一网络段) 1.例如192.168.1.x,只有x位不相同视为同一网络段 2.当具备了以上条件,即可编写服务端代码,服务端的机制. 3.Server ...