我想我缺少有关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
Run Code Online (Sandbox Code Playgroud)
这上面写的方式,功能DoStuff将去除顶行result 和 cow。同样,即使将第一行发送为,brown也what将删除该行ByVal。
如果我将第一行DoStuff从
Dim result As DataTable = cow
Run Code Online (Sandbox Code Playgroud)
至
Dim result As DataTable = cow.copy
Run Code Online (Sandbox Code Playgroud)
然后cow,brown和what被单独留在家中。为什么是这样?将参数标记ByVal为应该发送对象的副本而不是原始对象,那么为什么在实例化时告诉我使用副本result呢?如果我使用整数而不是数据表执行类似的过程,则它会按我期望的那样工作。我对数据表缺少什么?
我在MSDN上有关数据表的文章中闲逛,却没有发现任何有关此问题的信息。谢谢你的帮助!
该ByVal关键字并不一定表明该值的副本传递给方法。如果参数是引用类型(如)DataTable,则将指针的副本传递给方法-它仍引用相同的对象,因此一旦方法完成执行,对方法中对象的任何更改都将保留。
的ByRef关键字将允许方法来改变该变量指向的对象,或实际值,如果参数是简单类型(如int)。
在上述情况下,如果要在其中删除一行DoStuff,但不影响源DataTable,那么DataTable在执行删除操作之前,需要制作的副本。
| 归档时间: |
|
| 查看次数: |
1798 次 |
| 最近记录: |