ASP.NET入门到精通关于as的问题
发表在ASP.NET图书答疑 2009-08-23
是否精华
版块置顶:
ASP.NET入门到精通第35页讲as运算符的时候,就说了一句,说的不太清楚。我在微软件网站看到下面这样一段代码,但是我不太了解是什么意思,能不能帮忙讲解一下,他上面说as 运算符只执行引用转换和装箱转换。可是objArray[2] = "hello"; 这个转化成string类型的时候不是一个拆箱操作吗?怎么也可以运行。

class ClassA { }
class ClassB { }

class MainClass
{
    static void Main()
    {
        object[] objArray = new object[6];
        objArray[0] = new ClassA();
        objArray[1] = new ClassB();
        objArray[2] = "hello";
        objArray[3] = 123;
        objArray[4] = 123.4;
        objArray[5] = null;

        for (int i = 0; i < objArray.Length; ++i)
        {
            string s = objArray[i] as string;
            Console.Write("{0}:", i);
            if (s != null)
            {
                Console.WriteLine("'" + s + "'");
            }
            else
            {
                Console.WriteLine("not a string");
            }
        }
    }
}
/*
Output:
0:not a string
1:not a string
2:'hello'
3:not a string
4:not a string
5:not a string
*/
分享到:
精彩评论 7
goodboy
学分:0 LV1
2009-08-24
沙发
                
     ASP.NET入门到精通第35页里面关于  as 运算符只执行引用转换和装箱转换。没有错误呀。
     msdn帮助里是这样写道的:
    
    “as 运算符只执行引用转换和装箱转换。as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用 cast 表达式来执行。”
   string s = objArray[i] as string;这句话不是拆箱操作

goodboy
学分:0 LV1
2009-08-24
板凳
[FIELDSET][LEGEND]引自:1楼[/LEGEND]
                
     ASP.NET入门到精通第35页里面关于  as 运算符只执行引用转换和装箱转换。没有错误呀。
     msdn帮助里是这样写道的:
    
    “as 运算符只执行引用转换和装箱转换。as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用 cast 表达式来执行。”
   string s = objArray[i] as string;这句话不是拆箱操作


[/FIELDSET]

回复:详细内容请参考 http://msdn.microsoft.com/en-us/cscsdfbt(zh-cn,VS.80).aspx
  
goodboy
学分:0 LV1
2009-08-24
地板
string s = objArray[i] as string;

这句话是:as 运算符用于在兼容的引用类型之间执行转换。as 运算符类似于强制转换操作。如果无法进行转换, as 返回 null ,而强制转换会引发异常。
          这里的as是将类型强制转换为string类型


vaneward
学分:0 LV1
2009-08-24
4L
string s = objArray[i] as string;这句话不是拆箱操作,这个为什么不算拆箱操作,我还是不太理解,麻烦你帮忙再解释一下,谢谢
vaneward
学分:0 LV1
2009-08-24
5L
回复:
  
goodboy
学分:0 LV1
2009-08-25
6L
  装箱:是将值类型转换为对象类型
    int X = 200; 
  object obj = X; 
  Console.WriteLine ("对象值为 = {0}", obj); 
  说明:这是一个装箱的过程,它是将值类型转换为引用类型的过程。

    int X= 200; 
  object obj = X; 
  int Y= (int)obj; 
  Console.WriteLine ("数值为=: {0}", Y); 
    说明:这是一个拆箱的过程,是将值类型转换为引用类型,再由引用类型转换为值类型的过程。 
 
goodboy
学分:0 LV1
2009-08-25
7L
  实在不明白看看语法结构写法不一样吧。

 
首页上一页 1 下一页尾页 7 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照