Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

VB -> C#: incorrect handling of ref arguments in loop conditions

Aperta
#1,129 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
50/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
csharp, visualbasic
Ambito
tooling

Direzione di ricerca

Inizia riproducendo l’input VB.Net fornito e confronta la gestione esistente degli argomenti ref nella condizione if con le condizioni dei cicli While e Do. Traccia quindi i punti di ingresso del convertitore per le espressioni delle condizioni dei cicli, poi aggiungi o aggiorna un test di regressione in modo che tutte le condizioni dei cicli usino la funzione locale e producano l’output C# previsto.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Good for coding agent VB -> C#

An invocation with a ref argument in a loop condition isn't converted to a local function call, like it happens if the same invocation is in the if condition.

VB.Net input code
Imports System

Public Class ByRefLoopCondition
    Sub S()
        Dim i = 0
        If F(i) Then
            Console.WriteLine(i) : Console.WriteLine()
        End If
        While F(i)
            Console.WriteLine(i) : Console.WriteLine()
        End While
        Do Until F(i)
            Console.WriteLine(i) : Console.WriteLine()
        Loop
        Do While F(i)
            Console.WriteLine(i) : Console.WriteLine()
        Loop
        Console.WriteLine(i)
    End Sub

    Function F(ByRef i As Object) As Boolean
        i = i + 1
        Return i < 4
    End Function
End Class

Erroneous output
public void S()
{
    int i = 0;
    bool localF() { object argi = i; var ret = F(ref argi); i = Conversions.ToInteger(argi); return ret; }

    if (localF())
    {
        Console.WriteLine(i);
        Console.WriteLine();
    }
    object argi = i;
    while (F(ref argi))
    {
        Console.WriteLine(i);
        Console.WriteLine();
    }
    i = Conversions.ToInteger(argi);
    object argi1 = i;
    while (!F(ref argi1))
    {
        Console.WriteLine(i);
        Console.WriteLine();
    }
    i = Conversions.ToInteger(argi1);
    object argi2 = i;
    while (F(ref argi2))
    {
        Console.WriteLine(i);
        Console.WriteLine();
    }
    i = Conversions.ToInteger(argi2);
    Console.WriteLine(i);
}

public bool F(ref object i)
{
    i = Operators.AddObject(i, 1);
    return Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(i, 4, false));
}
Expected output
public void S()
{
    int i = 0;
    bool localF() { object argi = i; var ret = F(ref argi); i = Conversions.ToInteger(argi); return ret; }

    if (localF())
    {
        Console.WriteLine(i);
        Console.WriteLine();
    }
    while (localF())
    {
        Console.WriteLine(i);
        Console.WriteLine();
    }
    while (!localF())
    {
        Console.WriteLine(i);
        Console.WriteLine();
    }
    while (localF())
    {
        Console.WriteLine(i);
        Console.WriteLine();
    }
    Console.WriteLine(i);
}

public bool F(ref object i)
{
    i = Operators.AddObject(i, 1);
    return Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(i, 4, false));
}
Details
  • Product in use: VS extension
  • Version in use: 625c2075a178c591c5dd04f5fe980283f6481656
  • Did you see it working in a previous version, which? No
  • Any other relevant information to the issue, or your interest in contributing a fix.
Lingua principale
C#
Stelle
913
Fork
243
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di icsharpcode/CodeConverter

Tutte le issue di icsharpcode/CodeConverter

Issue simili

Altre issue su C#

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.