C# 使用DataTable.Select()时发生奇怪的事情

C# 使用DataTable.Select()时发生奇怪的事情,c#,C#,消息框显示“11”和“3 3”。为什么会这样?我没有操作DataTable,只操作保存DataTable值的DataRow[]。那么,为什么数据表中的值也发生了变化?有人能解释一下吗?看看 删除后需要调用AcceptChanges: DataTable dt = new DataTable(); DataRow[] dr; dt.Columns.Add(); dt.Columns.Add(); dt.Rows.Add(1, 1); dt.Rows.Add(2, 2); dt.Rows.Add(3

消息框显示“11”和“3 3”。为什么会这样?我没有操作DataTable,只操作保存DataTable值的DataRow[]。那么,为什么数据表中的值也发生了变化?有人能解释一下吗?

看看

删除后需要调用AcceptChanges:

DataTable dt = new DataTable();
DataRow[] dr;
dt.Columns.Add();
dt.Columns.Add();
dt.Rows.Add(1, 1);
dt.Rows.Add(2, 2);
dt.Rows.Add(3, 3);
dr = dt.Select();
dr[1].Delete();
foreach (DataRow x in dt.Rows)
MessageBox.Show(x[0] + "   " + x[1]);

您将获得对dr中选定行的引用,这些行不是副本。如果删除一个,则它将从dt.rows中消失,dr.

dr
实际上引用了
数据表dt
中的行。这就是它被删除的原因

所以我使用AcceptChanges,以便DataTable将更改回其原始值。。。谢谢:)@Gerald,没有AcceptChanges不能做到这一点,这个答案并不适用于你的问题。非常感谢:)我以为这些值被复制到了DataRow[]中。
dt.AcceptChanges();