C#和VB.Net输出参数

问题描述:

我在c#中有一个项目,它正在利用vb.net中编写的另一个项目。我目前能够修改两者。C#和VB.Net输出参数

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

Public Sub MethodName(ByVal param1 As String, ByRef param2 As String) 
     param2 = param1 + 1 
    End Sub 

我不能使用了关键字从C#调用这个方法:

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

     provider.AddTransaction(param1, out param2); 
    } 

应该不是为ByRef VB.Net中的关键字具有“ref”和“out”的功能?

我应该去参考吗?

+2

我的猜测是'out'与'ref'具有附加属性,'ByRef'只是'ref'。 – Joey

+0

参考参数需要初始化,但我不需要或没有任何用处。我并没有真的问这个,因为我被卡住了,我可以轻松地使用ref。 –

+3

可能的重复[有没有VB.NET等效的C#输出参数](http://*.com/questions/4358742/is-there-a-vb-net-equivalent-of-c-out-parameters) –

对于运行时refout是相当可互换的,因为它们都只是传递引用。 然而out的前缀在IL附加属性:

public void y(ref int a) 
public void z(out int a) 

变成

.method public hidebysig instance void y(int32& a) 
.method public hidebysig instance void z([out] int32& a) 

使C#编译器区分两个添加特殊语义out具有,即在输入方法之前out参数不需要具有分配的值,并且必须为在退出t之前分配一个值他的方法。

相反,VB中的ByRef只提供ref,但不提供out的附加语义。它在VB中没有相当于out

在VB中没有相当于out(就我所知)。只是ByRef这相当于ref,所以这将是正确的选择。

由于您将通过引用被调用的函数将收到您的价值,你将需要intialise你参数,使它有一个地址在内存中。

编辑:

既然你可以编辑,为什么不改变SubFunction和摆脱这一问题的 干脆,国际海事组织,使你的代码更好了。

+0

我有一个以上的参数需要在我的实际项目中返回。我问这个问题只是为了学习,而不是为我的项目提供解决方案。 我只会去参考。干杯。 –

+3

你可以返回一个类或结构。只是一个想法。 – Jodrell

ref一起去吧 - 这是VB的ByRef的C#等价物。

但是 请阅读详细说明:When to use ref vs out

正如我提到你question and answer可以指定在参数定义的<Out()> attibute,虽然VB忽略它,C#正确对待的说法。