Datarow对象,为什么这段代码有效?

时间:2014-11-22 12:01:50

标签: sql asp.net c#-4.0

将datatabe的行值分配给新数据行对象后,此对象的任何更改都会影响数据表,为什么?

查看此代码。

  DataRow dr = mydataset.Tables["NewTable"].Rows[0];
  dr["Name"] = "hello";

现在,如果您尝试调试应用程序,您会发现原始数据表[“NewTable”]具有新值hello而不是旧值虽然我们没有将上面的数据行返回到数据表(我们没有保存它)

我只是需要澄清,还需要知道&了解当我创建数据行的Object时实际发生了什么。

1 个答案:

答案 0 :(得分:1)

DataTable和DataRow都是参考数据类型。这意味着当您在代码中为其引用分配变量时,它只是将指针保存回相同的内存位置。

DataRow dr1 = mydataset.Tables["NewTable"].Rows[0];
DataRow dr2 = mydataset.Tables["NewTable"].Rows[0];
DataRow dr3 = dr1;
DataTable dt = mydataset.Tables["NewTable"];
DataRow dr4 = dt.Rows[0];

在上面的示例中,dr1,dr2,dr3和dr4都指向相同的内存位置。因此,如果编辑dr4,则更改将显示在dr1,dr2和dr3上。

有关详细信息,请参阅Value Types and Reference Types