te 被装箱了,成为一个引用类型。如果 m_ArrayList 是泛型的,则复制一个 te。无论哪种情况,从 m_ArrayList 取出的 te 都不是原来的 te

解决方案 »

  1.   

    //这里发生了一次值拷贝,传来的te的值被拷贝成形式参数te
    public bool AddEntry(__Task_Entry te)
    {
        //这里没有拷贝,只是对te装箱,创建一个System.Object对象,并装箱te
        m_ArrayList.Add(te);//在ArrayList里保存这个装箱后的对象,这是2003唯一的做法。你只能这样来吧一个值类型的存放到堆上去,如果2005,就可以用List了。不会发生这么多拷贝和装箱,当然读取时候还要拆箱的用arraylist
    }static void Process()
    {
        __Task_Entry te;//堆栈上分配内存,创建te
        AddEntry(te);//作为数值参数,传递给方法
    }