将datatabe的行值分配给新数据行对象后,此对象的任何更改都会影响数据表,为什么?
查看此代码。
DataRow dr = mydataset.Tables["NewTable"].Rows[0];
dr["Name"] = "hello";
现在,如果您尝试调试应用程序,您会发现原始数据表[“NewTable”]具有新值hello而不是旧值虽然我们没有将上面的数据行返回到数据表(我们没有保存它)
我只是需要澄清,还需要知道&了解当我创建数据行的Object时实际发生了什么。
答案 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。