this is only shallow copy , not copy your object  , just Pointer

解决方案 »

  1.   

    UP
    http://chs.gotdotnet.com/quickstart/aspplus/default.aspx
      

  2.   

    是shallow copy 则应该会起作用啊,搞不懂。
      

  3.   

    看看ItemArray都做了什么就明白了:)
    public object[] get_ItemArray()
    {
          int num2;
          int num1 = this.Table.Columns.Count;
          object[] objArray1 = new object[((uint) num1)];  //得到的是一个拷贝
          for (num2 = 0; (num2 < num1); num2 += 1)         //datarow中没有一个
          {                                            //所谓这么个数组保存值
                objArray1[num2] = this[num2];
          }
          return objArray1;
    }
    public object[] ItemArray
    {
          get
          {
                int num2;
                int num1 = this.Table.Columns.Count;
                object[] objArray1 = new object[((uint) num1)];
                for (num2 = 0; (num2 < num1); num2 += 1)
                {
                      objArray1[num2] = this[num2];
                }
                return objArray1;
          }
          set
          {
                DataColumn column1;
                int num2;
                this.BeginEdit();
                DataColumnChangeEventArgs args1 = new DataColumnChangeEventArgs();
                DataColumnCollection collection1 = this.Table.Columns;
                if (collection1.Count < value.Length)
                {
                      throw ExceptionBuilder.ValueArrayLength();
                }
                int num1 = value.Length;
                for (num2 = 0; (num2 < num1); num2 += 1)
                {
                      if (value[num2] != null)
                      {
                            column1 = collection1[num2];
                            args1.Initialize(this, column1, value[num2]);
                            this.Table.RaiseColumnChanging(this, args1);
                            column1[this.GetProposedRecordNo()] = args1.ProposedValue;
                            this.Table.RaiseColumnChanged(this, args1);
                      }
                }
                this.EndEdit();
          }
    }
      

  4.   

    shallow copy 是浅拷贝 ,不是深拷贝, 你可以参考 <<c# essential >>
      

  5.   

    to redbb(....Dotneter....) :
    您说的那本书,俺没有看过,以前看过C++的,记得浅拷贝指直复制资源的引用而不重新分配内存:例如,只是将指针指向同一内存,而不是分配新内存;类似于传递引用。而深拷贝则相反,类似于C++的拷贝构造函数。
    那么在这里,看看reflector后的代码,我觉得如果说这里是深拷贝或浅拷贝的话,我倒觉得这里应该是一个所谓”深拷贝“,即Array.Copy到的数组已经不是datarow的那个了(其实datarow里也没有:),而是重新分配了的内存object[] objArray1 = new object[((uint) num1)];  也许我记错了,欢迎拍板砖,谢谢指教!
      

  6.   

    是啊,如果是深拷贝,那倒是可以理解的。micropentium6(小笨)  的代码中显然使用了深拷贝,要真是如此那我也只有认了。
      

  7.   

    呵呵,那可不是我的代码,那是反编译system.data.dll的结果:)