C#中box和unbox操作隐式的,如果你用过ArrayList(其他任何容器)装载ValueType(int, long...),那么你一定用过box/unbox :),用ILDasm检查一下就知道了。
它的好处吗,就是把ValueType和ReferenceType统一在了以Object为核心的类库结构的领导下... 处理自然就方便多了。

解决方案 »

  1.   

    在C#中,装箱是隐式进行的,而拆箱必须显示进行.
    例如:
    int n = 1;
    object box = n;
    n = box;//错误:无法将类型object隐式转换为int
    你应该:
    int n = 1;
    object box = n;//装箱
    n = (int)box;//拆箱,ok
      

  2.   

    建议读一读这篇文章的第九节:类型一致
    http://www.csdn.net/develop/read_article.asp?id=11685
      

  3.   

    简单说一下我的见解,如有错讹,请大家指教:
    首先,(前提知识:)
         C#中有两种数据类型:               值类型和引用类型.
         C#中存储数据的时候有两个地方:     栈Stack和堆heap.     值类型放在Stack,  引用类型放在heap.    (涉及到Garbage Collection)
         C#是一个强类型语言,(检查十分严格)
         C#是一个面向对象的语言.(所有的东西都可以看作一个对象)那么如何把这些统一起来呢?
         Boxing装箱   and Unboxing拆箱     Boxing:将一个值类型隐式的转换成一个Object类型
                   值类型---->引用类型          Stack------->堆        
                   说明: 这个是隐式转换.比如:
                                int i=5;  (值类型)
                                String strBoxing = i.ToString();  (注意这里的装箱)
         
         UnBoxing: 将一个Object类型显式转换成一个值类型.当然,也可以是将一个接口类型到相关值类型转换
                   引用类型--->值类型          heap------->Stack
                   注意: 必须是显式. Why? 难道你不觉得这很危险???:) 当然有必要问一声Are You Sure?比较深层次的俺就解释不出来了.
      

  4.   

    我又学到了不少东西,感谢hillfree(比较土,请原谅)。