C#和VB.Net输出参数

Mat*_*ima 7 c# vb.net parameters out

我在c#中有一个项目正在使用另一个用vb.net编写的项目.我目前能够修改它们.

我在VB项目中有一个方法,如:

    Public Sub MethodName(ByVal param1 As String, ByRef param2 As String)
        param2 = param1 + 1
    End Sub
Run Code Online (Sandbox Code Playgroud)

我无法使用C#中的out关键字调用此方法:

    public void CallOtherMethod()
    {
        string param1 ="test";
        string param2;

        provider.AddTransaction(param1, out param2);
    }
Run Code Online (Sandbox Code Playgroud)

VB.Net中的ByRef关键字不应该具有"ref"和"out"的能力吗?

我应该选择参考吗?

Joe*_*oey 14

到运行时ref并且out可以相当互换,因为它们都只是传递引用.但是,outIL中的附加属性带有前缀:

public void y(ref int a)
public void z(out int a)
Run Code Online (Sandbox Code Playgroud)

变成

.method public hidebysig instance void  y(int32& a)
.method public hidebysig instance void  z([out] int32& a)
Run Code Online (Sandbox Code Playgroud)

这使得C#编译器能够区分这两者添加具有的特殊语义out,即out参数在进入方法之前不需要具有指定的值,并且必须在退出方法之前为其分配值.

相比之下,ByRef在VB中只提供了ref,但没有提供额外的语义out.它out在VB中没有相应的东西.