Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 使用ParamArray ByRef_Vb.net_Byref_Byval_Paramarray_Turbo Basic - Fatal编程技术网

Vb.net 使用ParamArray ByRef

Vb.net 使用ParamArray ByRef,vb.net,byref,byval,paramarray,turbo-basic,Vb.net,Byref,Byval,Paramarray,Turbo Basic,有没有办法使用ParamArray ByRef?除此之外,是否有一个解决办法可以完成同样的事情 我可以做一些超载,但我正在努力避免笨重 背景:移植一些旧代码,并尽量保持相同的结构 编辑 我想要什么的一个具体例子: 我有一些turboBasic代码要移植到vb.net。该代码具有内置函数,例如 Input#1,Data$(I%,1),Data$(I%,2),Data$(I%,3) 其中Input()获取文件#1并从中读取三条数据并将其分配给所示的三个变量。我想用我自己的Input()函数复制这

有没有办法使用ParamArray ByRef?除此之外,是否有一个解决办法可以完成同样的事情

我可以做一些超载,但我正在努力避免笨重

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


编辑 我想要什么的一个具体例子:

我有一些turboBasic代码要移植到vb.net。该代码具有内置函数,例如

Input#1,Data$(I%,1),Data$(I%,2),Data$(I%,3)
其中Input()获取文件#1并从中读取三条数据并将其分配给所示的三个变量。我想用我自己的Input()函数复制这种行为。要做到这一点,我将如何输入三个(或更多,或更少)变量并为它们赋值


理想情况下,我只需修改自己对Input()的定义即可实现这一点,这样我就可以尽可能少地插入代码库。

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

即使没有
ByRef
,调用方仍会看到数组内容的更改。(数组是引用类型)

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

ParamArray
参数的作用是传递一个隐式创建的数组。

在这种用法中,
ByRef
不会产生任何效果。

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

即使没有
ByRef
,调用方仍会看到数组内容的更改。(数组是引用类型)

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

ParamArray
参数的作用是传递一个隐式创建的数组。

在这种用法中,
ByRef
不能起任何作用。

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


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

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


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

我从未使用过TurboBasic,但语法看起来与VB6相同,因此我猜语义也相同

这是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升级向导将VB6
Input
语句转换为如下形式。我只是像这样移植代码,而不是实现您自己的函数。从VB6转换到VB.net需要对代码库进行大量编辑,我希望TurboBasic的要求更高。

我从未使用过TurboBasic,但语法看起来与VB6相同,所以我猜语义也相同

这是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升级向导将VB6
Input
语句转换为如下形式。我只是像这样移植代码,而不是实现您自己的函数。从VB6转换到VB.net需要对代码库进行大量编辑,我希望TurboBasic的要求更高。

是的,问题是parameterName=确实发生了一些事情。那么它就不应该是
ParamArray
。它叫什么名字?您可能需要使用不同的名称创建一个
ParamArray
版本。我在原始问题中给出了更多的解释。是的,问题是parameterName=确实发生了一些事情。那么它就不应该是
ParamArray
。它叫什么名字?您可能需要使用不同的名称制作一个
ParamArray
版本。我在原始问题中做了一些解释。标题和您的问题不一致。我假设您想通过引用传递paramary?“按值”是VB.NET中的默认(也是唯一)选项。请检查你的问题标题。它没有任何意义。您希望被调用者创建一个新的参数数组并将其传递回调用者?
%
类型声明字符在VB6中表示
整数
;我想TurboBasic也是这样?如果是这样的话,在我看来,最简单的方法就是将
Input
函数传递给
Integer
类型的数组。代码中声明的
Input
方法填充的变量在哪里?它们是否具有全局作用域,还是在调用
Input
的相同方法中定义的?或者这是一种“在我假装存在变量的地方自动实例化变量”的语言吗?看起来TurboBasic与VB6非常相似。Input()还应接受字符串。大多数变量都有全局范围。我很确定这是不可能的。标题和你的问题不一致。我假设您想通过引用传递paramary?“按值”是VB.NET中的默认(也是唯一)选项。请检查你的问题标题。它没有任何意义。您希望被调用方创建一个新参数