VB -> C#: incorrect handling of ref arguments in loop conditions
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 50/100
Línea de trabajo
Comienza reproduciendo la entrada VB.Net proporcionada y compara el manejo existente de los argumentos ref en la condición if con las condiciones de los bucles While y Do. Rastrea los puntos de entrada del conversor para las expresiones de condición de los bucles y, a continuación, añade o actualiza una prueba de regresión para que todas las condiciones de los bucles utilicen la función local y produzcan la salida C# esperada.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- C#
- Estrellas
- 914
- Forks
- 242
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de icsharpcode/CodeConverter
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
icsharpcode/CodeConverter#1271 · 1 comentario ·
-
C# -> VB: most pattern matching fails to convertPosiblemente ocupada @gherards99 la tomó hace 34 días. AbiertoC# -> VB
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
icsharpcode/CodeConverter#1281 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
icsharpcode/CodeConverter#1275 ·
-
VB -> C#: Handleres of sub properties being untrackedPosiblemente ocupada @Igor-Tomasi la tomó hace 69 días. AbiertoVB -> C#
Dificultad 3/5 1-2 días Aptitud para principiantes 62/100
icsharpcode/CodeConverter#1273 ·
-
VB -> C#: "Group By Into" Linq queries supressing aggregations ("Into" part) in the converted codeAbiertoDifficult area VB -> C#
Dificultad 3/5 1-2 días Aptitud para principiantes 74/100
icsharpcode/CodeConverter#1272 ·
Todos los issues de icsharpcode/CodeConverter
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
stryker-mutator/stryker-net#3892 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
MobiFlight/MobiFlight-Connector#3419 ·
Los mantenedores suelen responder en 1 día
-
`Source` with an `avares://` URI and a `#fragment` throws instead of scrolling to the anchorAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Kryptos-FR/MarkView.Avalonia#105 ·
Los mantenedores suelen responder en 1 día
-
[辞書]Abierto提案 辞書
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
microsoft/fluentui-blazor#5410 ·
Los mantenedores suelen responder en 1 día