VB -> C#: incorrect handling of ref arguments in loop conditions
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 50/100
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
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
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di icsharpcode/CodeConverter
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
icsharpcode/CodeConverter#1271 · 1 commento ·
-
C# -> VB: most pattern matching fails to convertForse già presa @gherards99 l’ha presa 32 giorni fa. ApertaC# -> VB
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
icsharpcode/CodeConverter#1281 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
icsharpcode/CodeConverter#1275 ·
-
VB -> C#: Handleres of sub properties being untrackedForse già presa @Igor-Tomasi l’ha presa 68 giorni fa. ApertaVB -> C#
Difficoltà 3/5 1-2 giorni Idoneità per principianti 62/100
icsharpcode/CodeConverter#1273 ·
-
VB -> C#: "Group By Into" Linq queries supressing aggregations ("Into" part) in the converted codeApertaDifficult area VB -> C#
Difficoltà 3/5 1-2 giorni Idoneità per principianti 74/100
icsharpcode/CodeConverter#1272 ·
Tutte le issue di icsharpcode/CodeConverter
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
I maintainer di solito rispondono entro 1 giorno
-
:watch: Not Triaged aspnet-core/svc fundamentals/subsvc Source - Docs.ms
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
dotnet/AspNetCore.Docs#37785 ·
I maintainer di solito rispondono entro 1 giorno
-
needs-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
Azure/azure-sdk-tools#17204 ·
I maintainer di solito rispondono entro 1 giorno
-
Проблема с Dotnet RUApertaarea-tutorials needs-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
dotnet/website-feedback#1779 ·
-
[Bug] SwipeControl in Execute mode with more than one item replaces the whole UI with an error panelForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertabug needs-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
microsoft/microsoft-ui-reactor#1344 ·
I maintainer di solito rispondono entro 1 giorno