gpt4 book ai didi

vb.net - ByVal 数据表操作

转载 作者:行者123 更新时间:2023-12-02 21:40:19 27 4
gpt4 key购买 nike

我认为我遗漏了一些关于数据表如何工作的基本知识。以下过程以 GetData 开头,引入what作为填充的数据表。以下代码所做的全部工作是传递数据表的副本,对其进行操作,然后返回它:

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

然后cow , brownwhat被单独留下。为什么是这样?将参数标记为 ByVal应该发送对象的副本而不是原始对象,那么为什么我要告诉它在实例化 result 时使用副本?如果我使用整数而不是数据表执行类似的过程,它会按我的预期工作。我对数据表缺少什么?

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

最佳答案

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

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

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

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

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