上一个表单的数据表在转移到下一个表单并在数据表中进行更改时发生更改,为什么?

我有两种形式,分别名为form1form2,我必须将数据表dtform1转移到form2。在form2构造函数中我传递数据表参数_dt,如下面的代码所示,在form1按钮中单击,我调用form2并传递参数dt。我正确地得到了dtform2中。

//Form1 button click event
private void Button_Click(object sender,EventArgs e)
    {
      //i have filled datatable dt
        form2 f2= new form2(dt);        
        f2.Show();
    }
//from2
 public partial class form2: Form
    {
         DataTable dt = new DataTable();
         public form2(DataTable _dt)
        {
          InitializeComponent();
          dt = _dt;       
        }
    }
//change dt by adding columns in form2

当我更改form2的数据表时,以前格式(form1)的数据表也发生了变化。我不明白为什么dt的{​​{1}}被更改了。请告诉我为什么会发生这种情况?我有解决此问题的替代方法,但我想知道为什么会发生这种情况。

baili251810659 回答:上一个表单的数据表在转移到下一个表单并在数据表中进行更改时发生更改,为什么?

因为您只有一个DataTable。将对象分配给变量时,不会创建该对象的副本或克隆。您要做的只是将该变量设置为对相同对象的引用。可以想象它有两个指向内存中同一事物的变量。

(与创建副本的简单原始值类型(例如intbool相对)

要创建DataTable副本,请使用its .Copy() method

public form2(DataTable _dt)
{
    InitializeComponent();
    dt = _dt.Copy();       
}
本文链接:https://www.f2er.com/3138111.html

大家都在问