是否有一个VB.NET等价的C#输出参数?

VB.NET有一个直接等价于C# outfunction参数,其中传递到一个函数的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 。