C#强制类型转换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C#强制类型转换
()
1、int适合简单数据类型之间的转换,C#的默认整型是int32(不⽀持bool型);
2、int.Parse(string sParameter)是个静态⽅法,参数类型只⽀持string类型;
3、Convert.ToInt32()适合将Object类型转换为int型;
4、Convert.ToInt32()和int.Parse()的细微差别:
对于空值(null)的处理不同,Convert.ToInt32(null)会返回0⽽不会产⽣任何异常,但int.Parse(null)则会产⽣异常。
举例来说:
假如从url中取⼀个参数page的值,我们知道这个值是⼀个int,所以即可以⽤Convert.ToInt32(Request.QueryString["page"]),也可以⽤int.Parse(Request.QueryString["page"]),但是如果page这个参数在url中不存在,那么前者将返回0,0可能是⼀个有效的值,所以你不知道url中原来根本就没有这个参数⽽继续进⾏下⼀步的处理,这就可能产⽣意想不到的效果;⽽⽤后⼀种⽅法的话没有page这个参数则会抛出异常,我们可以捕获异常然后再做相应处理,⽐如提⽰⽤户缺少参数等,⽽不是把参数值当做0来处理。
5、再有⼀点区别是:
(1).Convert.ToInt32(double value) 如果 value 为两个整数中间的数字,则返回⼆者中的偶数;即 4.5 转换为 4,⽽ 5.5 转换为 6;
(2). int(4.6) = 4,int转化其他数值类型为int时没有四舍五⼊,强制转换(截取整数部分);
(3). int.Parse(4.5) 会直接报错:"输⼊字符串的格式不正确"。
int.Parse是转换String为int;
Convert.ToInt32是转换继承⾃Object的对象为int的;你得到⼀个object对象,你想把它转换为int,⽤int.Parse就不可以,要⽤
Convert.ToInt32.
总结:
(1)Convert.ToInt32的参数⽐较多,Int.Parse只能转换string类型的.
(2)Parse就是把String转换成int,char,double....等,也就是*.Parse(string) 括号中的⼀定要是string.
(3)Convert可以提供多种类型的转换,也就是Convert.*()括号中可以为很多种类型(包括string).
as操作法:
⾄于安全性,对于as操作符来说,它不会做过的转换操作,当需要转换对象的类型属于转换⽬标类型或者转换⽬标类型的派⽣类型的时候,那么此转换操作才能成功,⽽且并不产⽣新的对象。
因此⽤as来进⾏类型转换使安全的。
为什么⽤as操作符进⾏类型转换的效率要⾼于⽼式的类型转换的,因为⽤as操作符进⾏转换就如前⾯所说的,⾸先判断当前对象的类型,当类型满⾜要求后才进⾏转换。
⽽传统的类型转换⽅式,是⽤当前对象直接去转换,⽽且为了保护转换成功,要加上try-catch,这就决定了它的效率不会⾼于as操作符的效率。
⽤as来进⾏类型转换的时候,所要转换的对象类型必须是⽬标类型或者转换⽬标类型的派⽣类型,那么这样就有个问题,即⽤as操作符来进⾏类型转换的时候⽆法转换成正确的类型,也就是说本来应该转换成⼦类型,却转换成了⽗类型。
但是我并不认为这是个严重问题,因为在⽤as操作符来进⾏类型转换的时候,如何选择⽬标类型在编码的时候已经很明确了,即⽤⽗类型作为⽬标类型,那么类型转换的⽬的就是转换成⽗类型对象进⾏操作;反之亦然。
类型转换使⽤选择
Object转换已知引⽤类型使⽤as操作符来完成
Object 转换已知值类型先使⽤is操作符来进⾏判断,再⽤类型强转⽅式进⾏转换
已知引⽤类型之间转换⾸先需要相应类型提供转换函数,再⽤类型强转⽅式进⾏转换
已知值类型之间转换最好使⽤系统提供的Convert类所涉及的静态⽅法。