c# is as 和强制类型转换

参考:http://blog.sina.com.cn/s/blog_63f15e560100hzp6.html

http://blog.csdn.net/xqiangqiang/article/details/5287447

首先:

总结一下(xxx)和xxx.Parse(),Convert.xxx(),xxx.TryParse(string, out xx)的区别:

(int)转换:用在数值范围大的类型转换成数值范围小的类型时使用,但是如果被转换的数值大于或者小于数值范围,则得到一个错误的结果,利用这种转换方式不能将string转换成int,会报错。

Int32.Parse(),转换:在符合数字格式的string到int类型转换过程中使用,并可以对错误的string数字格式的抛出相应的异常。

Convert.ToInt32()转换:使用这种转换,所提供的字符串必须是数值的有效表达方式,该数还必须不是溢出的数。否则抛出异常。

 xxx.TryParse(string, out xx)转换:类似于 Parse 方法,不同之处在于 TryParse 方法在转换失败时不引发异常,赋默认值。

as is 和强制类型转换

由于对象是多态的,因此基类类型的变量可以保存派生类型。若要访问派生类型的方法,需要将值强制转换回该派生类型。不过,在这些情况下,如果只尝试进行简单的强制转换,会导致引发 InvalidCastException 的风险。这就是 C# 提供 isas 运算符的原因。您可以使用这两个运算符来测试强制转换是否会成功,而没有引发异常的风险。通常,as 运算符更高效一些,因为如果可以成功进行强制转换,它会实际返回强制转换值。而 is 运算符只返回一个布尔值。因此,如果只想确定对象的类型,而无需对它进行实际强制转换,则可以使用 is 运算符。

Effective c#中强调as is优于强制类型转换,

在 C# 中已经提供了一个很好的类型转换方式,那么在进行类型转换的时候,可以按照如下的方式进行选择。

类型转换

使用选择

Object => 已知引用类型

使用 as 操作符来完成

Object => 已知值类型

先使用 is 操作符来进行判断,再用类型强转方式进行转换

已知引用类型之间转换

首先需要相应类型提供转换函数,再用类型强转方式进行转换

已知值类型之间转换

最好使用系统提供的 Convert 类所涉及的静态方法

 

posted @ 2013-11-07 10:31  nygfcn  阅读(1512)  评论(0编辑  收藏  举报