【发布时间】:2013-12-13 22:18:54
【问题描述】:
我认为我缺少有关 DataTables 如何工作的基本知识。以下过程从GetData 开始,将what 作为填充的DataTable 引入。以下代码所做的只是传递数据表的副本,对其进行操作,然后将其返回:
Sub GetData(ByVal what As DataTable)
Dim Part As DataTable = Generate(what)
End Sub
Function Generate(ByVal brown As DataTable)
Dim lameface As DataTable = DoStuff(brown)
Return lameface
End Function
Function DoStuff(ByVal cow As DataTable)
Dim result As DataTable = cow
result.Rows.RemoveAt(0)
Return result
End Function
按照上面的写法,函数DoStuff 将从result 中删除第一行和 cow。同样,brown 和 what 也将删除第一行,即使它们以 ByVal 发送。
如果我将DoStuff 中的第一行更改为
Dim result As DataTable = cow
到
Dim result As DataTable = cow.copy
然后 cow、brown 和 what 将被单独留下。为什么是这样?将参数标记为ByVal 应该发送对象的副本 而不是原始对象,那么为什么我在实例化result 时告诉它使用副本?如果我使用整数而不是数据表执行类似的过程,它会按我的预期工作。我对数据表缺少什么?
我在 MSDN 的数据表文章中四处寻找,但没有看到任何与此相关的内容。感谢您的帮助!
【问题讨论】:
-
DataTable是一种引用类型,因此您没有表格的副本,而只有它的引用。所以如果你修改它,你将修改原始表。 -
msdn.microsoft.com/en-us/library/8b0bdca4.aspx(也适用于 VB.NET)