是否有一个VB.NET等价的C#输出参数?
VB.NET有一个直接等价于C# out
function参数,其中传递到一个函数的variables不需要被初始化?
不,在VB中没有out
关键字的等价物。
然而,VB会自动初始化一个方法中的所有局部variables,所以你可以使用ByRef
而不需要首先明确地初始化variables。
例:
Sub Main() Dim y As Integer Test(y) End Sub Sub Test(ByRef x As Integer) x = 42 End Sub
(如果您检查框架中的代码(例如Double.TryParse ),您可能会看到将<OutAttribute>
添加到参数中,但只有在调用COM调用或平台调用时才会有所不同。
不,没有等价的构造允许非初始化的variables传递给没有警告的方法,但是正如我的问题和答案中提到的,在ByRef
参数定义中指定<Out()>
属性 ,虽然VB忽略它被C#视为out
参数。
所以,我会预先初始化引用variables为Nothing
并指定<Out()> ByRef
来表示意图(如果C#用户访问您的方法,这将工作)。
如果你觉得你知道什么时候打算访问其他未分配的引用variables中的缺省值,可以在项目级别(Project Properties> Compile)中设置“Warning configuration” “赋值前的variables使用”为“None”可能要在更改此设置之前将configuration设置为“所有configuration”),或者在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
在这里find答案
更新
正如在评论中所述,不要忘记初始化您将在out插槽中使用的参数
您可以在VB.NET中使用通过引用方法。
您需要C#中的Out参数机制,因为它不允许您在不初始化的情况下使用任何variables。
VB.NET不需要特殊的关键字,因为它本身自动完成。
只需使用ByRef。
我在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)
它也有助于编码时,如果variables名称是描述性的…
Sub fnCreatePalette(ByRef arr_in_pal() As color, ByRef arr_out_pal() as uinteger) ... End Sub
variables前使用关键字ByRef 。