Answers:
不,out
在VB中没有与之等效的关键字。
但是,VB确实会自动初始化方法中的所有局部变量,因此您可以使用 ByRef
而无需先显式初始化变量。
例:
Sub Main()
Dim y As Integer
Test(y)
End Sub
Sub Test(ByRef x As Integer)
x = 42
End Sub
(如果检查框架中的代码(例如Double.TryParse),则可能会看到<OutAttribute>
添加到参数中的参数,但这仅在将调用编组以进行COM互操作或平台调用时有所不同。)
ByRef
参数时,我也会收到编译器警告。(值类型参数不会发生这种情况。)
Nothing
给他们也可以摆脱警告,即使它不会改变结果。
Nothing
到目前为止,我一直在分配给他们。这只是浪费时间,因为我必须在一个大型旧网站中进行数百次。感谢您的调查。
Out
属性不等同于C#out
关键字。
不,没有等效的构造允许将未初始化的变量传递给方法而不会发出警告,但是,正如我在问答中提到的那样,尽管VB忽略了它,但在VB忽略它的情况下,仍由C#来处理,但在参数定义中指定了<Out()>
属性作为参数。ByRef
out
因此,我将预先初始化引用变量Nothing
并指定<Out()> ByRef
以表示意图(如果C#用户曾经访问您的方法,则该意图将起作用)。
如果您知道何时打算访问Nothing
未分配的参考变量中的默认值,则可以在项目级别(项目属性>编译)将“警告配置”,“分配前使用变量”设置为“无”。想要在更改此设置之前将“配置”设置为“所有配置”),或者,在VS2015(VB.NET 14)中,可以使用#Disable Warning BC42030
。
C#版本
void TestFunc(int x, ref int y, out int z) {
x++;
y++;
z = 5;
}
Vb.net版本
Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer)
x += 1
y += 1
z = 5
End Sub
更新资料
如评论中所述,不要忘记初始化将在出槽中使用的参数
我在VB.NET中遇到了一个问题,即我调用了“由ref”传递给数组的函数。
即使编译器将其标记为警告,也可以。该修复程序非常简单,可能是良好的编程习惯。
我变了
Dim m_arr_values() as Integer
fnRetArray(m_arr_values)
至
' Even though 'Nothing' is the default value, setting it
' stops the compiler complaining.
Dim m_arr_values() as Integer = Nothing
fnRetArray(m_arr_values)
如果变量名具有描述性,则在编码时也有帮助...
Sub fnCreatePalette(ByRef arr_in_pal() As color, ByRef arr_out_pal() as uinteger)
...
End Sub
您可以在VB.NET中使用“按引用传递”方法。
您需要C#中的Out参数机制,因为它不允许您在未初始化的情况下使用任何变量。
VB.NET不需要特殊的关键字,因为它是自动自动完成的。
只需使用ByRef。
VB具有应与C#输出相同的属性,但是今天即使使用它,您仍然会收到警告。在github的vblang区域中有关于修复它的详细信息。https://github.com/dotnet/vblang/issues/67。
Object
,因此不能将其用于ByRef x As Integer
参数)。