c# - 为什么 datatable.Clear 也清除其他数据表?

标签 c# .net

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/

相关文章:

javascript - KnockOut 无法解析绑定(bind)

c# - 加载 EntityFramework 4.3.1 时出错

C# 运行带参数的 excel 宏

.net - 当通过 COM 调用时,我可以从 .net 代码使用/访问 app.config

c# - 如何使用.Net部署sqlite

c# - .NET 浏览器模拟 API

C# 大端 UCS-2

c# - LINQ Join 的内存使用情况是多少?

C# 是否可以将 groupBox 标题设为单选按钮?

c# - 类型 'System.Drawing.Image' 在未引用的程序集中定义