为什么datatable.Clear,也清除其他数据表?

JOE*_*EET 2 .net c#

DataTable dttemp = new DataTable();
dttemp=orderedTable;
dttemp.Rows.Clear();
Run Code Online (Sandbox Code Playgroud)

由于某种原因,它orderedTable也被清除了!有谁知道为什么会这样?

Jon*_*eet 8

当你执行这一行时:

dttemp = orderedTable;
Run Code Online (Sandbox Code Playgroud)

实际上只有一个DataTable是相关的.在DataTable你的第一行代码创建符合垃圾收集-什么也没有服用任何通知.这里列出的行不会使副本对象 -它使副本的参考,使dttemporderedTable指同一DataTable.

DataTable是一种参考类型.这是绝对重要的,你明白引用类型在C#中是如何工作的-否则整个语言都会有莫名其妙的结果你.我有一篇文章,您可能会发现这些文章很有用.

要将代码置于上下文中,想象一下a DataTable实际上是一个房子.您将家庭住址提供给两个不同的人.一个人去把房子涂成红色......然后另一个人去看房子.显然他会发现它是红色的.

重要的是你没有给每个人"你的房子" - 你只是给了他们一个你家的方式.这就是引用类型在C#中的工作方式.

的价值dttemp是不是DataTable-这是一个参考DataTable.通过任何其他变量对该对象所做的更改仍将通过dttemp.