A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 鲍云龙 中级黑马   /  2012-6-22 08:04  /  1619 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

强制类型转换 与 用as进行转换的区别是什么?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

2 个回复

倒序浏览
1、as 运算符类似于类型转换,所不同的是,当转换失败时,as运算符将产生空,而不是引发异常。在形式上,这种形式的表达式:expression as type
2、as运算符只执行引用转换和装箱转换。
3、as运算符无法执行其他转换,如用户定义的转换,这类转换应使用case表达式来代替其执行。
关于is的其实也差不多,只是is不会帮你进行任何的转换。所以需要自已进行显示转换。is操作符进行转换,它自动检查时局是否和类型兼容,并返回结果。而且它不会抛出异常。如果对象引用为null,则is总返回false。
我觉得用as转换比强制类型要好些,至少不会报异常。

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
本帖最后由 刘逍遥 于 2012-6-22 15:10 编辑

类型转换时编程中很常见的操作:
     经常出现类型转换不成功,并且会抛出异常
1  is运算符:
        定义使用格式: 表达式   is  目标类型
               适用范围:
                     1  引用转换   ----------------引用类型之间转换
                      2  装箱转换 ----------------- 值类型到引用类型之间转换
                        3  拆箱转换 -------------------引用类型到值类型之间转换
          举例:一下代码用is运算法来检测Bob类型是否能转换成Person类
               class Person           //定义Person类
              {
                   public string name="乖蛋";
               }
             class  Bob:Person{}  //Bob继承自Person类
            
              //主程序  【引用类型之间转换
             class Program
            {
                 static void Main()
                 {
                        Bob b=new Bob();   //实例化Bob
                        Person  p;                //声明Person引用
                       if( b  is  p)                 //尝试转换            此处可以看到is运算符在类型转换,如果成功则为true,否则为false
                      {
                             p=b;                 //如果成功则p=b
                             Console.WriteLine("p 中的name是:{0}", p.name)
                     }
                 }
           }
2 as  运算符
    定义格式: 表达式  as  目标类型
    使用范围:
                     1  引用转换   ----------------引用类型之间转换
                      2  装箱转换 ----------------- 值类型到引用类型之间转换
        举例:
             class Person           //定义Person类
              {
                   public string name="乖蛋";
               }
             class  Bob:Person{}  //Bob继承自Person类
            
              //主程序  【as转换】
             class Program
            {
                 static void Main()
                 {
                        Bob b=new Bob();   //实例化Bob
                        Person  p;                //声明Person引用
                       p =b  as   Person     //定义的格式
                       if( p!=null )                 //尝试转换            此处可以看到as运算符在类型转换,如果成功则为源类型引用,否则为null
                      {
                             Console.WriteLine("p 中的name是:{0}", p.name)
                     }
                 }
           }

希望对你有用!
     

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马