- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我认为我遗漏了有关 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
应该发送对象的 copy 而不是原始对象,所以为什么我要告诉它在实例化 result 时使用副本
?如果我使用整数而不是数据表执行类似的过程,它会按我预期的那样工作。关于数据表,我缺少什么?
我浏览了 MSDN 的数据表文章,但没有看到任何与此相关的内容。感谢您的帮助!
最佳答案
ByVal
关键字不一定表示将值的副本传递给该方法。如果参数是引用类型,如 DataTable
,则指针的副本会传递给方法 - 它仍然引用同一个对象,因此在方法中对该对象所做的任何更改都将是方法完成执行后保持。
ByRef
关键字将允许该方法更改变量指向的对象,或者如果参数是简单类型(如 整数
).
在你上面的情况下,如果你想删除 DoStuff
中的一行,但不影响源 DataTable
,那么你需要复制 DataTable
在执行删除操作之前。
关于vb.net - ByVal 数据表操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20568625/
我有以下代码: Sub AddValidation() Dim ws, wsDefinitions As Worksheet Set ws = ThisWorkbook.Worksheet
我想我最近(终于)开始掌握 ByVal 和 ByRef 在 VBA 中的工作方式。 观察结果 在我迄今为止读过的所有教程和引用文献中,ByRef 始终是“传递对象”,ByVal 是“传递对象的副本”
我正在从 Excel 电子表格中导出多个 INI 文件,其中一行表示一个 INI 文件,INI 部分和键是列。到目前为止,这工作得很好,除了似乎 VBA 正在传递字典 ByRef (?),但让我解释一
我在 Access 2013 中使用 VBA。 在常规模块中有 2 个过程,RunProc() 和 PopulateCollection() 当执行RunProc时,它会调用PopulateColle
我认为我遗漏了一些关于数据表如何工作的基本知识。以下过程以 GetData 开头,引入what作为填充的数据表。以下代码所做的全部工作是传递数据表的副本,对其进行操作,然后返回它: Sub GetDa
我认为我遗漏了有关 DataTables 工作原理的一些基本知识。以下过程以 GetData 开始,将 what 作为填充的 DataTable 引入。以下所有代码所做的就是传递数据表的副本,对其进行
我正在观看一些关于 Nodejs 的介绍类型视频。我遇到了一个我想出来的问题,但我想了解“为什么”。这是有问题的原始代码: var http = require("http"); va
我正在 VBA 上制作一个宏,该宏附加到 excel 中的数据验证列表。当从列表中选择某个选项时,我希望它运行分配给该选择的宏。但是我反复收到错误“编译错误。参数不是可选的。我知道我需要在调用宏后添加
我不需要这个声明,因为它只会使我的代码变得庞大且不可读。 有没有办法让 Visual Studio (VS) 不自动添加它。每次我删除它时,它都会被 VS 添加回来。 Function DoStuff
有什么不同?我总是使用 ByVal,但是,我真的不知道什么时候应该什么时候不应该...... 最佳答案 ByRef = 你给你的 friend 你的学期论文(原件),他会做标记并可以退还给你。ByVa
在 ByRef 和 ByVal 之间进行选择时需要考虑哪些事项。 我理解两者之间的区别,但我不完全理解 ByRef 是否节省资源,或者我们是否需要在 .Net 环境中担心这一点。 如果功能在某种情况下
ByRef 与 ByVal 会生成错误!? 我有一个使用对象的方法 Function Foo(ByRef bar as CustomObject) as Boolean 此方法生成错误,因为一些奇怪的
我尝试尝试 JaredPar ByRef vs ByVal Clarification 回答的问题 ByVal in VB.NET means that a copy of the provided
当我进行提取方法重构时,ReSharper 总是想把 ByVal 修饰符放在任何地方。不再需要显式放置 ByVal 并且 Visual Studio 本身 doesn't do that anymor
我正在从 asp.net 应用程序调用一个 dll(用 vb6 编写)。我正在调用 dll 的以下函数: Public Function FamIdentify_BYTE(strName As Str
我正在学习 C++ 在线类(class) (Pluralsight.com),并在模板上进行练习,特别是将实际数字(例如 3 )传递给需要 (T& t) 的模板。 . 讲师编写的代码无法在我的 PC
我正在使用第三方 C++ dll,它使用具有以下签名的函数: extern "C" __declspec(dllimport) int __stdcall CalcDDtable(struct ddT
我知道 C# 中的默认值是 ByVal。我在很多地方使用了相同的变量名,然后我注意到传递的值发生变化并返回。我想我知道 C# 的作用域机制是错误的。这里公共(public) license 覆盖本地
在 VB.NET 中,用于方法参数更快,ByVal或 ByRef ? 此外,哪个在运行时(RAM)消耗更多资源? 我通读了this question ,但答案不适用或不够具体。 最佳答案 Byval
我正在使用事件处理程序,如果选择一个或两个单元格,我会运行某些事件。我遇到的问题是,当选择两个单元格时,我不知道如何访问第二个单元格的属性(即它的值是什么)。知道如何访问所选的第二个单元格的值(我希望
我是一名优秀的程序员,十分优秀!