gpt4 book ai didi

vb.net - ByVal 数据表操作

转载 作者:行者123 更新时间:2023-12-02 04:42:24 25 4
gpt4 key购买 nike

我认为我遗漏了有关 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 中删除第一行。同样,brownwhat 也将删除第一行,即使它们作为 ByVal 发送。

如果我将 DoStuff 中的第一行从

Dim result As DataTable = cow

Dim result As DataTable = cow.copy

然后cowbrownwhat就不用管了。为什么是这样?将参数标记为 ByVal 应该发送对象的 copy 而不是原始对象,所以为什么我要告诉它在实例化 result 时使用副本?如果我使用整数而不是数据表执行类似的过程,它会按我预期的那样工作。关于数据表,我缺少什么?

我浏览了 MSDN 的数据表文章,但没有看到任何与此相关的内容。感谢您的帮助!

最佳答案

ByVal 关键字不一定表示将值的副本传递给该方法。如果参数是引用类型,如 DataTable,则指针的副本会传递给方法 - 它仍然引用同一个对象,因此在方法中对该对象所做的任何更改都将是方法完成执行后保持。

ByRef 关键字将允许该方法更改变量指向的对象,或者如果参数是简单类型(如 整数).

在你上面的情况下,如果你想删除 DoStuff 中的一行,但不影响源 DataTable,那么你需要复制 DataTable 在执行删除操作之前。

关于vb.net - ByVal 数据表操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20568625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com