DataTable dttemp = new DataTable();
dttemp=orderedTable;
dttemp.Rows.Clear();
出于某种原因,orderedTable
也被清除了!有谁知道为什么会这样?
最佳答案
当您执行此行时:
dttemp = orderedTable;
实际上只有一个相关的DataTable
。您在第一行代码中创建的 DataTable
符合垃圾回收条件 - 没有人注意到它。此处引用的行不会复制 object - 它会复制 reference,因此 dttemp
和 orderedTable
引用相同的 DataTable
。
DataTable
是引用类型。了解引用类型在 C# 中的工作方式绝对至关重要 - 否则整个语言会给您带来莫名其妙的结果。我有一个 article您可能会发现这些思路很有用。
为了将您的代码置于上下文中,假设 DataTable
实际上是一座房子。你把你的家庭住址给了两个不同的人。一个去把房子漆成红色……然后另一个参观房子。显然他会发现它是红色的。
重要的是你没有给每个人“你的房子”——你只是给了他们一种去你家的方式。这就是引用类型在 C# 中的工作方式。
dttemp
的值不是 DataTable
- 它是对 DataTable
的引用。通过任何其他变量对该对象所做的更改仍将通过 dttemp
看到。
关于c# - 为什么 datatable.Clear 也清除其他数据表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4695271/