CodeConverter icon indicating copy to clipboard operation
CodeConverter copied to clipboard

VB -> C#: out param is set after return

Open KunzeAndreas opened this issue 3 years ago • 0 comments

VB.Net input code

Private Shared Sub ReturnWithOutParam()
    Dim testclass = New OutParamTestClass
    Assert.That(testclass.Number = 2)

    Dim dummy = CallSubWithOutParam(testclass)
    Assert.That(testclass.Number = 1)
End Sub
Private Shared Function CallSubWithOutParam(testClass As OutParamTestClass) As Boolean
    Return SubWithOutParam(testClass.Number)
End Function
Private Shared Function SubWithOutParam(<Out> ByRef out_a As Integer) As Boolean
    out_a = 1
    Return True
End Function
Private Class OutParamTestClass
    Friend Property Number As Integer = 2
End Class

Erroneous output

private static void ReturnWithOutParam()
{
    var testclass = new OutParamTestClass();
    Assert.That(testclass.Number == 2);

    bool dummy = CallSubWithOutParam(testclass);
    Assert.That(testclass.Number == 1);
}
private static bool CallSubWithOutParam(OutParamTestClass testClass)
{
    int argout_a = testClass.Number;
    return SubWithOutParam(out argout_a);
    testClass.Number = argout_a;
}
private static bool SubWithOutParam(out int out_a)
{
    out_a = 1;
    return true;
}
private class OutParamTestClass
{
    internal int Number { get; set; } = 2;
}

Expected output

private static bool CallSubWithOutParam(OutParamTestClass testClass)
{        
    int argout_a = testClass.Number;
    var result= SubWithOutParam(out argout_a);
    testClass.Number = argout_a;
    return result;
}

Details

  • Product in use: VS extension
  • Version in use: 9.0.0.0
  • Did you see it working in a previous version, which? no

KunzeAndreas avatar May 16 '22 09:05 KunzeAndreas