1

有什么方法可以使用 ParamArray ByRef 吗?除此之外,是否有一种解决方法可以完成同样的事情?

我可以做一些超载,但我试图避免笨拙。

背景:移植一些旧代码,并尽可能保持相同的结构。


编辑

我想要的一个具体例子:

我在 turboBasic 中有一些代码要移植到 vb.net。该代码具有内置功能,例如

Input#1,Data$(I%,1),Data$(I%,2),Data$(I%,3)

Input() 获取文件 #1 并从中读取三段数据并将其分配给所示的三个变量。我想用我自己的 Input() 函数复制这种行为。为此,我将如何接受三个(或更多,或更少)变量并为它们赋值?

理想情况下,我只需修改我自己的 Input() 定义即可完成此操作,因此我可以尽可能少地在代码库中添加垃圾。

4

3 回答 3

2

我从未使用过 TurboBasic,但语法看起来与 VB6 Input# statement相同,所以我猜语义也是相同的。

这个 VB6 代码

Input #1,Data$(I%,1),Data$(I%,2),Data$(I%,3)

相当于这个VB.Net

Input(1,Data$(I%,1))
Input(1,Data$(I%,2))
Input(1,Data$(I%,3))

VB.Net 升级向导Input #像这样转换 VB6 语句。我只会像这样移植代码,而不是实现自己的功能。从 VB6 转换到 VB.net 需要对代码库进行大量编辑,我预计 TurboBasic 的要求会更高。

于 2010-11-10T17:54:10.973 回答
2

目前没有办法在 VB.NET 中通过引用传递 ParamArrays。要将一系列指定值传递给接受 ParamArray 的方法,CLR 用您指定的值填充适当长度的数组,然后将该数组传递给您调用的方法。无法将所有值从传递的数组中复制并返回到原始变量中。

我假设您正在从 VB6 移植代码,其中传递 ParamArrays 的唯一方法是通过引用,但您在 .NET 中不需要此功能。

于 2010-11-10T16:43:02.020 回答
1

除非您将参数分配给新的数组实例并期望调用者(正在传递变量或字段)看到新实例,否则您不需要ByRef.

即使没有ByRef,调用者仍然会看到数组内容的变化。(数组是引用类型)。

如果方法中没有看到parameterName = something,则不需要ByRef.

参数的要点ParamArray是将隐式创建的数组传递给它。
在这样的用法中,ByRef不会有任何效果。

于 2010-11-10T16:36:33.723 回答